最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1、目的

通過讀取配置文件獲取pgsql用戶名和密碼及數(shù)據(jù)庫和數(shù)據(jù)表,從而讀取所需字段值。

2、代碼架構

  • 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)
    }
}

到此這篇關于golang與pgsql交互的實現(xiàn)的文章就介紹到這了,更多相關golang pgsql交互內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Golang內(nèi)存管理之內(nèi)存分配器詳解

    Golang內(nèi)存管理之內(nèi)存分配器詳解

    Go內(nèi)存分配器的設計思想來源于TCMalloc,全稱是Thread-Caching?Malloc,核心思想是把內(nèi)存分為多級管理,下面就來和大家深入聊聊Go語言內(nèi)存分配器的使用吧
    2023-06-06
  • GoLang并發(fā)機制探究goroutine原理詳細講解

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

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

    Golang 并發(fā)控制模型的實現(xiàn)

    Go控制并發(fā)有三種經(jīng)典的方式,使用?channel?通知實現(xiàn)并發(fā)控制、使用 sync 包中的?WaitGroup?實現(xiàn)并發(fā)控制、使用?Context?上下文實現(xiàn)并發(fā)控制,下面就來介紹一下
    2024-08-08
  • Go并發(fā)編程之死鎖與活鎖的案例分析

    Go并發(fā)編程之死鎖與活鎖的案例分析

    死鎖就是在并發(fā)程序中,兩個或多個線程彼此等待對方完成操作,從而導致它們都被阻塞,并無限期地等待對方完成;活鎖就是程序一直在運行,但是無法取得進展。本文將從一些案例出發(fā),分析一下它們,希望對大家有所幫助
    2023-04-04
  • go語言LeetCode題解944刪列造序示例詳解

    go語言LeetCode題解944刪列造序示例詳解

    這篇文章主要為大家介紹了go語言LeetCode題解944刪列造序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • golang語法使用的注意事項

    golang語法使用的注意事項

    這篇文章主要給大家介紹了關于golang語法使用的一些注意事項,Golang是一種靜態(tài)類型的編程語言,它支持基本的數(shù)據(jù)類型,包括整型、浮點型、布爾型、字符串型,需要的朋友可以參考下
    2023-07-07
  • Go開發(fā)神器Air熱加載的安裝使用探究

    Go開發(fā)神器Air熱加載的安裝使用探究

    這篇文章主要介紹了Go開發(fā)神器Air熱加載使用實例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Go中數(shù)組傳參的幾種方式小結

    Go中數(shù)組傳參的幾種方式小結

    本文主要介紹了Go中數(shù)組傳參的幾種方式小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • golang生成RSA公鑰和密鑰的實現(xiàn)方法

    golang生成RSA公鑰和密鑰的實現(xiàn)方法

    本文主要介紹了golang生成RSA公鑰和密鑰的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-08-08
  • 詳解Golang如何動態(tài)獲取配置文件

    詳解Golang如何動態(tài)獲取配置文件

    項目中經(jīng)常獲取一些常用配置文件,當有配置文件中的參數(shù)被修改后,如何的實時獲取配置文件就很關鍵了,下面小編就來講講如何利用viper實時獲取配置文件吧
    2023-08-08

最新評論

瑞丽市| 安乡县| 盐津县| 宁乡县| 五大连池市| 安平县| 茶陵县| 宜章县| 麻江县| 都江堰市| 西青区| 五寨县| 宁晋县| 交口县| 屏东市| 武安市| 吉木萨尔县| 佛坪县| 竹北市| 中方县| 黄浦区| 清涧县| 开化县| 特克斯县| 毕节市| 泸水县| 孙吴县| 盐边县| 安平县| 咸宁市| 卓尼县| 英德市| 东港市| 罗山县| 腾冲县| 温州市| 昭平县| 连云港市| 东平县| 沙雅县| 兴化市|