在golang中是否有类似于sql.NullJson的东西?

用户10714010:

我正在使用golang从postgres查询,其中一个字段包含的内容json有时可能是NULL

像这样

row := db.QueryRow(
    "select my_string, my_json from my_table where my_string = $1",
   my_id)


var my_string sql.NullString
var myjson MyJsonStruct
err := row.Scan(&my_string2, &myjson)

但是我越来越

sql: Scan error on column index 2, name "my_json": unsupported Scan, storing driver.Value type <nil> into type *main.MyJsonStruct

我检查了https://godoc.org/database/sql但没有找到sql.NullJson应对这种情况的可行方法?

yoest fresta rahmawan:

不,没有sql.json。我认为处理db中json列的最佳方法是实现评估器和扫描器。所以像这样:

// Scan implements database/sql.Scanner interface
func (m *MyJsonStruct) Scan(src interface{}) error {
    if src == nil {
        return nil
    }
    data, ok := src.([]byte)
    if !ok {
        return errors.New("type assertion to []byte failed")
    }
    var myJsonStruct MyJsonStruct
    if err := json.Unmarshal(data, &myJsonStruct); err != nil {
        return fmt.Errorf("unmarshal myJsonStruct: %w", err)
    }
    *m = myJsonStruct
    return nil
}

// Value implements database/sql/driver.Valuer interface
func (m MyJsonStruct) Value() (driver.Value, error) {
    data, err := json.Marshal(m)
    if err != nil {
        return nil, fmt.Errorf("marshal myJsonStruct: %w", err)
    }
    return data, nil
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Django中是否有类似于“耙路”的东西?

在Java中是否有类似于strip_tags的东西?

Java中是否有类似于instanceOf(Class <?> c)的东西?

Elixir中是否有类似于ruby send方法的东西?

是否有类似于Android中的stringByAppendingPathComponent的东西?

IronPython 中是否有类似于 ENUM 的东西

Ruby是否有类似于。=的东西,例如+ =?

在 React Native 中,是否有类似于新 Pressable 组件中的 activeOpacity 道具的东西?

在 kotlin 和 android 中,是否有类似于 rxjs 或 rxjava 中的 switchmap 的东西?

JUnit 3是否有类似于@BeforeClass的东西?

是否有类似于Java的mini-mvc-profiler的东西?

java是否具有类似于C#属性的东西?

是否有类似于$ scope。$ watch的NSMutableArray之类的东西

是否有类似于ramda.js的lodash _.toArray的东西?

React 是否有类似于 Angular 的 *ngIf 的东西?

是否有一些类似于JavaScript .querySelectorAll()的东西?

是否有类似于 xamarin 形式的 Unity void Update() 的东西?

在本地C中是否有类似于std :: lock_guard的东西?

Python生成器中是否有类似于“自我”的东西?

对于多个字符,vim 中是否有类似于 f 命令的东西?

在vb.net中是否有类似于“ with”的东西,但是功能呢?

React-Admin AutocompleteInput中是否有类似于Material-UI Autocomplete freeSolo的东西

在Haskell中,有类似于后卫的东西吗?

Django中是否有类似NSUserDefaults的东西?

golang是否有类似泛型(java)的东西?

是否有类似jQuery的东西?

是否有类似@JsonIgnoreOtherProperties的东西?

是否有类似sudo的东西?

是否有类似于tf.cond的东西,但有向量谓词?