3 回答

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊
只需在Model.go中添加下面的代碼(referenceLink)
import (
"errors"
"database/sql/driver"
"encoding/json"
)
// JSONB Interface for JSONB Field of yourTableName Table
type JSONB []interface{}
// Value Marshal
func (a JSONB) Value() (driver.Value, error) {
return json.Marshal(a)
}
// Scan Unmarshal
func (a *JSONB) Scan(value interface{}) error {
b, ok := value.([]byte)
if !ok {
return errors.New("type assertion to []byte failed")
}
return json.Unmarshal(b,&a)
}
->元帥的參考鏈接,Unmarshal
現(xiàn)在您可以使用以下命令插入數(shù)據(jù)DB.Create(&yourTableName)

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個(gè)贊
我在 https://stackoverflow.com/a/71636216/13719636 中回答了類似的問題。
在 Gorm 中使用 JSONB 的最簡單方法是使用 .pgtype.JSONB
Gorm 使用作為驅(qū)動(dòng)程序,并具有名為 的包,其類型名為 。pgxpgxpgtypepgtype.JSONB
如果您已經(jīng)按照Gorm的指示進(jìn)行安裝,則無需安裝任何其他軟件包。pgx
此方法應(yīng)該是最佳做法,因?yàn)樗褂没A(chǔ)驅(qū)動(dòng)程序,并且不需要自定義代碼。
type User struct {
gorm.Model
Data pgtype.JSONB `gorm:"type:jsonb;default:'[]';not null"`
}
從數(shù)據(jù)庫中獲取價(jià)值
u := User{}
db.find(&u)
var data []string
err := u.Data.AssignTo(&data)
if err != nil {
t.Fatal(err)
}
將值設(shè)置為 DB
u := User{}
err := u.Data.Set([]string{"abc","def"})
if err != nil {
return
}
db.Updates(&u)
- 3 回答
- 0 關(guān)注
- 273 瀏覽
添加回答
舉報(bào)