欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang與pgsql交互的實現(xiàn)

 更新時間:2023年03月17日 10:22:15   作者:沒枕頭我咋睡覺  
本文主要介紹了golang與pgsql交互的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

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)文章

  • 詳解Go語言中切片的長度與容量的區(qū)別

    詳解Go語言中切片的長度與容量的區(qū)別

    切片可以看成是數(shù)組的引用,切片的長度是它所包含的元素個數(shù)。切片的容量是從它的第一個元素到其底層數(shù)組元素末尾的個數(shù)。本文將通過示例詳細(xì)講講Go語言中切片的長度與容量的區(qū)別,需要的可以參考一下
    2022-11-11
  • Go語言調(diào)用其它程序并獲得程序輸出的方法

    Go語言調(diào)用其它程序并獲得程序輸出的方法

    這篇文章主要介紹了Go語言調(diào)用其它程序并獲得程序輸出的方法,實例分析了Go調(diào)用cmd程序的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • GoLang并發(fā)機(jī)制探究goroutine原理詳細(xì)講解

    GoLang并發(fā)機(jī)制探究goroutine原理詳細(xì)講解

    goroutine是Go語言提供的語言級別的輕量級線程,在我們需要使用并發(fā)時,我們只需要通過 go 關(guān)鍵字來開啟 goroutine 即可。這篇文章主要介紹了GoLang并發(fā)機(jī)制goroutine原理,感興趣的可以了解一下
    2022-12-12
  • GO語言實現(xiàn)二維碼掃碼的示例代碼

    GO語言實現(xiàn)二維碼掃碼的示例代碼

    你對二維碼掃碼的流程有困惑嗎,這篇文章就結(jié)合筆者自身的開發(fā)經(jīng)驗進(jìn)行分享,讓大家熟悉并掌握此功能,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧
    2023-06-06
  • 在go語言中安裝與使用protobuf的方法詳解

    在go語言中安裝與使用protobuf的方法詳解

    protobuf以前只支持C++, Python和Java等語言, Go語言出來后, 作為親兒子, 那有不支持的道理呢? 這篇文章主要給大家介紹了關(guān)于在go語言中使用protobuf的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-08-08
  • Golang中由零值和gob庫特性引起B(yǎng)UG解析

    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研究記錄

    這篇文章主要為大家介紹了golang基于websocket通信tcp keepalive研究記錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Go 語言下基于Redis分布式鎖的實現(xiàn)方式

    Go 語言下基于Redis分布式鎖的實現(xiàn)方式

    本篇文章將詳細(xì)介紹如何正確地實現(xiàn)Redis分布式鎖,下面通過一個項目基于 Redis 的分布式鎖能夠提供哪些分布鎖特性,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-06-06
  • 一文詳解go閉包(Closure)使用教程

    一文詳解go閉包(Closure)使用教程

    在Go語言中,閉包(Closure)是一種特殊的函數(shù),它可以捕獲其創(chuàng)建時所在作用域中的變量,本文給大家詳細(xì)介紹了go閉包(Closure)使用教程,感興趣的朋友可以參考下
    2024-01-01
  • Go習(xí)慣用法(多值賦值短變量聲明賦值簡寫模式)基礎(chǔ)實例

    Go習(xí)慣用法(多值賦值短變量聲明賦值簡寫模式)基礎(chǔ)實例

    本文為大家介紹了Go習(xí)慣用法(多值賦值,短變量聲明和賦值,簡寫模式、多值返回函數(shù)、comma,ok 表達(dá)式、傳值規(guī)則)的基礎(chǔ)實例,幫大家鞏固扎實Go語言基礎(chǔ)
    2024-01-01

最新評論