golang與pgsql交互的實現(xiàn)
1、目的
通過讀取配置文件獲取pgsql用戶名和密碼及數(shù)據(jù)庫和數(shù)據(jù)表,從而讀取所需字段值。
2、代碼架構(gòu)

- config/config.go:讀取配置文件信息
- config/config.json:配置文件
- handle/handle.go:與pgsql數(shù)據(jù)庫交互,獲取所需數(shù)據(jù)
- main.go:主函數(shù)
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"`
?? ?//數(shù)據(jù)庫名稱
?? ?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轉(zhuǎn)換至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 {
//創(chuàng)建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)
}
}到此這篇關(guān)于golang與pgsql交互的實現(xiàn)的文章就介紹到這了,更多相關(guān)golang pgsql交互內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
GoLang并發(fā)機(jī)制探究goroutine原理詳細(xì)講解
goroutine是Go語言提供的語言級別的輕量級線程,在我們需要使用并發(fā)時,我們只需要通過 go 關(guān)鍵字來開啟 goroutine 即可。這篇文章主要介紹了GoLang并發(fā)機(jī)制goroutine原理,感興趣的可以了解一下2022-12-12
Golang中由零值和gob庫特性引起B(yǎng)UG解析
這篇文章主要為大家介紹了Golang中由零值和gob庫特性引起B(yǎng)UG解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
golang基于websocket通信tcp keepalive研究記錄
這篇文章主要為大家介紹了golang基于websocket通信tcp keepalive研究記錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Go習(xí)慣用法(多值賦值短變量聲明賦值簡寫模式)基礎(chǔ)實例
本文為大家介紹了Go習(xí)慣用法(多值賦值,短變量聲明和賦值,簡寫模式、多值返回函數(shù)、comma,ok 表達(dá)式、傳值規(guī)則)的基礎(chǔ)實例,幫大家鞏固扎實Go語言基礎(chǔ)2024-01-01

