1、目的

        通过读取配置文件获取pgsql用户名和密码及数据库和数据表,从而读取所需字段值。

2、代码架构

Go语言学习日记【三十一】golang与pgsql交互_sql

      config/config.go:读取配置文件信息

      config/config.json:配置文件

      handle/handle.go:与pgsql数据库交互,获取所需数据

      main.go:主函数

3、代码展示

   config.go

package config

import (
"io/ioutil"
"os"
"fmt"
"encoding/json"
)

type Pgsql struct {
//Pgsql账号
Username string `json:"username"`
//Pgsql密码
Password string `json:"password"`
//Pgsql地址
Address string `json:"address"`
//Pgsql端口
Port int `json:"port"`
//数据库名称
Database string `json:"database"`
//表名称
Table string `json:"table"`
//账号字段名称
AccountField string `json:"accountField"`
//密码字段名称
PwdField string `json:"pwdField"`
}


//配置文件路径
var ConfigPath string = "config/config.json"

// pgsql配置信息缓存
var PgsqlData *Pgsql


func Init() {
//初始化配置对象
PgsqlData = new(Pgsql)
//读取配置文件
file, err := os.Open(ConfigPath)
if err != nil {
fmt.Println("config path:", err)
os.Exit(1)
}
bytes, err := ioutil.ReadAll(file)
if err != nil {
fmt.Println("config file:", err)
os.Exit(1)
}
//使用json转换至config对象中
err = json.Unmarshal(bytes, PgsqlData)
if err != nil {
fmt.Println("json unmarshal:", err)
os.Exit(1)
}
}

    config.json

{
"username": "***",
"password": "*********",
"address": "localhost",
"port": 5432,
"database": "***",
"table": "***",
"accountField": "***",
"pwdField": "***"
}

  handle.go

package handle

import (
"database/sql"
"errors"
"fmt"
"pgsql/config"
_ "github.com/lib/pq"
)

func Executl() error {
config.Init()
if config.PgsqlData != nil {
//创建mysql连接
db, err := sql.Open("postgres", fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", config.PgsqlData.Address, config.PgsqlData.Port, config.PgsqlData.Username, config.PgsqlData.Password, config.PgsqlData.Database))
if err != nil {
return err
}
defer db.Close()
str := fmt.Sprintf("select %s,%s from %s where NAME='%s'", config.PgsqlData.AccountField, config.PgsqlData.PwdField, config.PgsqlData.Table, config.PgsqlData.Username)
rows := db.QueryRow(str)
var name *sql.NullString
var pwd *sql.NullString
err = rows.Scan(&name, &pwd)
if err != nil {
return err
}
if name.String == "" || pwd.String == "" {
return errors.New("data is null")
}
fmt.Println("name:",name.String)
fmt.Println("passwd:",pwd.String)
return nil
}
return errors.New("open config file failed")
}

  main.go

package main

import (
"pgsql/handle"
"os"
)

func main() {
err := handle.Executl()
if err != nil {
os.Exit(1)
}
}