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-12Golang中由零值和gob庫特性引起B(yǎng)UG解析
這篇文章主要為大家介紹了Golang中由零值和gob庫特性引起B(yǎng)UG解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04golang基于websocket通信tcp keepalive研究記錄
這篇文章主要為大家介紹了golang基于websocket通信tcp keepalive研究記錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Go習(xí)慣用法(多值賦值短變量聲明賦值簡寫模式)基礎(chǔ)實例
本文為大家介紹了Go習(xí)慣用法(多值賦值,短變量聲明和賦值,簡寫模式、多值返回函數(shù)、comma,ok 表達(dá)式、傳值規(guī)則)的基礎(chǔ)實例,幫大家鞏固扎實Go語言基礎(chǔ)2024-01-01