golang與pgsql交互的實(shí)現(xiàn)
更新時(shí)間:2023年03月17日 10:22:15 作者:沒(méi)枕頭我咋睡覺(jué)
本文主要介紹了golang與pgsql交互的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
1、目的
通過(guò)讀取配置文件獲取pgsql用戶名和密碼及數(shù)據(jù)庫(kù)和數(shù)據(jù)表,從而讀取所需字段值。
2、代碼架構(gòu)

- config/config.go:讀取配置文件信息
- config/config.json:配置文件
- handle/handle.go:與pgsql數(shù)據(jù)庫(kù)交互,獲取所需數(shù)據(jù)
- main.go:主函數(shù)
3、代碼展示
config.go
package config
?
import (
?? ?"io/ioutil"
?? ?"os"
?? ?"fmt"
?? ?"encoding/json"
)
?
type Pgsql struct {
?? ?//Pgsql賬號(hào)
?? ?Username string `json:"username"`
?? ?//Pgsql密碼
?? ?Password string `json:"password"`
?? ?//Pgsql地址
?? ?Address string `json:"address"`
?? ?//Pgsql端口
?? ?Port int `json:"port"`
?? ?//數(shù)據(jù)庫(kù)名稱
?? ?Database string `json:"database"`
?? ?//表名稱
?? ?Table string `json:"table"`
?? ?//賬號(hào)字段名稱
?? ?AccountField string `json:"accountField"`
?? ?//密碼字段名稱
?? ?PwdField string `json:"pwdField"`
}
?
?
//配置文件路徑
var ConfigPath string = "config/config.json"
?
// pgsql配置信息緩存
var PgsqlData *Pgsql
?
?
func Init() {
?? ?//初始化配置對(duì)象
?? ?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對(duì)象中
?? ?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交互的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)golang pgsql交互內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
GoLang并發(fā)機(jī)制探究goroutine原理詳細(xì)講解
goroutine是Go語(yǔ)言提供的語(yǔ)言級(jí)別的輕量級(jí)線程,在我們需要使用并發(fā)時(shí),我們只需要通過(guò) go 關(guān)鍵字來(lái)開(kāi)啟 goroutine 即可。這篇文章主要介紹了GoLang并發(fā)機(jī)制goroutine原理,感興趣的可以了解一下2022-12-12
Golang 并發(fā)控制模型的實(shí)現(xiàn)
Go控制并發(fā)有三種經(jīng)典的方式,使用?channel?通知實(shí)現(xiàn)并發(fā)控制、使用 sync 包中的?WaitGroup?實(shí)現(xiàn)并發(fā)控制、使用?Context?上下文實(shí)現(xiàn)并發(fā)控制,下面就來(lái)介紹一下2024-08-08
golang生成RSA公鑰和密鑰的實(shí)現(xiàn)方法
本文主要介紹了golang生成RSA公鑰和密鑰的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08

