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

Go語言結(jié)合gorm實現(xiàn)讀取PostgreSQL的json數(shù)據(jù)類型

 更新時間:2025年10月29日 09:14:18   作者:qinyuan15  
使用gorm讀取PostgreSQL中json/jsonb類型數(shù)據(jù)是一個常見的操作,本文介紹幾種方法,適用于幾類不同的場景,感興趣的小伙伴可以跟隨小編一起學習一下

常用方法

在本例中,數(shù)據(jù)庫有一個表 test_tbl1,包含如下三個字段:

  • id,主鍵,長整型
  • params,jsonb類型
  • params2,json類型

接下來展示從該表中讀取一行數(shù)據(jù)的幾種方法:

方法一

type TestTbl1 struct {
   ID      int64 `gorm:"primaryKey"`
   Params  string
   Params2 string
}

func main() {
    row := &TestTbl1{}
    var db *gorm.DB
    db = initDB()   // 初始化數(shù)據(jù)庫連接的代碼省略,可以查閱相關資料
    err := db.First(row).Error
    if err != nil {
       log.Error("fail to query test_tbl1: %v", err)
    }
    log.Infof("get data: %+v", row)
    log.Infof("get data: params: %+v", row.Params)
    log.Infof("get data: params2: %+v", row.Params2)
}

這是比較簡單和適用性較強的方法,查出字符串之后再做解析。即使數(shù)據(jù)庫的json/jonb字段格式不一致時,也能正常運行。

方法二

考慮到go中做json解析的方法是json.Unmarshal,該方法的參數(shù)是[]byte,為了方便做json解析,可以直接將字段類型從sting改為[]byte:

type TestTbl1 struct {
   ID      int64 `gorm:"primaryKey"`
   Params  []byte
   Params2 []byte
}

func main() {
    row := &TestTbl1{}
    var db *gorm.DB
    db = initDB()   // 初始化數(shù)據(jù)庫連接的代碼省略,可以查閱相關資料
    err := db.First(row).Error
    if err != nil {
       log.Error("fail to query test_tbl1: %v", err)
    }
    log.Infof("get data: %+v", row)
    log.Infof("get data: params: %+v", string(row.Params))
    log.Infof("get data: params2: %+v", string(row.Params2))
}

方法三

如果json/jsonb字段的格式是固定的,可以在查詢的時候自動做json解析。在本例中,假設param的取值示例為 {"k1": "v1", "k2": "v2"},param2的取值示例為["v1","v2","v3"],則相關代碼如下:

type StringArray []string

func (j *StringArray) Scan(value interface{}) error {
   return json.Unmarshal(value.([]byte), j)
}

func (j *StringArray) Value() (driver.Value, error) {
   return json.Marshal(j)
}

type JsonObject struct {
   K1 string
   K2 string
}

func (j *JsonObject) Scan(value interface{}) error {
   return json.Unmarshal(value.([]byte), j)
}

func (j *JsonObject) Value() (driver.Value, error) {
   return json.Marshal(j)
}

type TestTbl1 struct {
   ID      int64     `gorm:"primaryKey"`
   Params  JsonObject     `gorm:"type:jsonb"`
   Params2 StringArray `gorm:"type:json"`
}

func main() {
    row := &TestTbl1{}
    var db *gorm.DB
    db = initDB()   // 初始化數(shù)據(jù)庫連接的代碼省略,可以查閱相關資料
    err := db.First(row).Error
    if err != nil {
       log.Error("fail to query test_tbl1: %v", err)
    }
    log.Infof("get data: %+v", row)
    log.Infof("get data: params: %+v", row.Params)
    log.Infof("get data: params2: %+v", row.Params2)
}

這一種方法的普適性有限。例如,如果json/jsonb字段存儲的是第三方透傳參數(shù),則其格式就不是固定的,本方法則不適用。

到此這篇關于Go語言結(jié)合gorm實現(xiàn)讀取PostgreSQL的json數(shù)據(jù)類型的文章就介紹到這了,更多相關Go gorm讀取PostgreSQL數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • go select編譯期的優(yōu)化處理邏輯使用場景分析

    go select編譯期的優(yōu)化處理邏輯使用場景分析

    select 是 Go 中的一個控制結(jié)構(gòu),類似于用于通信的 switch 語句。每個 case 必須是一個通信操作,要么是發(fā)送要么是接收。接下來通過本文給大家介紹go select編譯期的優(yōu)化處理邏輯使用場景分析,感興趣的朋友一起看看吧
    2021-06-06
  • Go語言kafka生產(chǎn)消費消息實例搬磚

    Go語言kafka生產(chǎn)消費消息實例搬磚

    這篇文章主要為大家介紹了Go語言kafka生產(chǎn)消費消息的實例搬磚,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Go Gin框架中的路由組及其優(yōu)先級探索分析

    Go Gin框架中的路由組及其優(yōu)先級探索分析

    在構(gòu)建Web應用程序時,理解和有效地使用路由是至關重要的,Go語言的Gin框架為此提供了強大的工具,特別是通過其路由組功能,本文將深入探討Gin的RouterGroup,特別是在路徑匹配和優(yōu)先級方面的行為
    2024-01-01
  • Go語言并發(fā)模型的2種編程方案

    Go語言并發(fā)模型的2種編程方案

    這篇文章主要介紹了Go語言并發(fā)模型的2種編程方案,本文給出共享內(nèi)存和通過通信的2種解決方案,并給出了實現(xiàn)代碼,需要的朋友可以參考下
    2014-10-10
  • Go語言實現(xiàn)ssh&scp的方法詳解

    Go語言實現(xiàn)ssh&scp的方法詳解

    這篇文章主要為大家詳細介紹了如何利用Go語言實現(xiàn)ssh&scp,文中的示例代碼講解詳細,具有一定的參考價值,感興趣的小伙伴可以了解一下
    2022-10-10
  • golang 如何替換掉字符串里面的換行符\n

    golang 如何替換掉字符串里面的換行符\n

    這篇文章主要介紹了golang 替換掉字符串里面的換行符\n操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Go Module依賴管理的實現(xiàn)

    Go Module依賴管理的實現(xiàn)

    Go Module是Go語言的官方依賴管理解決方案,其提供了一種簡單、可靠的方式來管理項目的依賴關系,本文主要介紹了Go Module依賴管理的實現(xiàn),感興趣的可以了解一下
    2024-06-06
  • 一文搞懂Go語言中條件語句的使用

    一文搞懂Go語言中條件語句的使用

    這篇文章主要介紹了Go語言中五個常用條件語句的使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • 利用golang和shell計算一個字符串的md5值

    利用golang和shell計算一個字符串的md5值

    這篇文章主要介紹了如何利用golang和shell計算一個字符串的md5值,我們先用shell來計算一下,再去判斷golang計算的md5值是否正確,文中有詳細的圖文介紹,需要的朋友可以參考下
    2024-03-03
  • 一文帶你熟悉Go語言中函數(shù)的使用

    一文帶你熟悉Go語言中函數(shù)的使用

    這篇文章主要和大家分享一下Go語言中的函數(shù)的使用,文中的示例代碼講解詳細,對我們學習Go語言有一定的幫助,需要的小伙伴可以參考一下
    2022-11-11

最新評論

双牌县| 怀安县| 兴和县| 洪湖市| 偏关县| 伽师县| 辽宁省| 博客| 莒南县| 隆德县| 垣曲县| 辽阳市| 民和| 石狮市| 綦江县| 宁都县| 浠水县| 华容县| 桐庐县| 兴化市| 勃利县| 泰州市| 靖宇县| 常熟市| 垣曲县| 瑞丽市| 中江县| 汨罗市| 时尚| 莒南县| 临泽县| 阳东县| 赣州市| 濉溪县| 嘉禾县| 济南市| 榆社县| 通海县| 太和县| 光山县| 都安|