猿问

用于 golang sql.NULL* 类型的自定义 MarshalText()

我试图在使用 SQL.NullFloat64 和https://github.com/kisielk/sqlstruct包的代码中将 SQL 结果封送到 JSON 中。


参考:https : //github.com/kisielk/sqlstruct/issues/11#issuecomment-143400458


这个问题是我得到


{

    "Float64": 141,

    "Valid": true

}

导致 JSON 而不仅仅是值。按照上面 github 问题中的建议,我尝试创建一个自定义 MarshalText() 但它从未被调用。


代码位于:https : //gist.github.com/fils/3f557941d71f1a7165ca


生成的 JSON 位于:https : //gist.github.com/fils/a01cadcbb5dc7c797c3e


CSV 转储功能仅可以获取和输出值,但不确定如何为 JSON 获得这种效果。


使用 sql.NullFloat64 或自定义类型 NullFloat64 给出相同的结果。


慕森卡
浏览 184回答 1
1回答

慕神8447489

你NullFloat64的不是encoding.TextMarshaler. 见http://play.golang.org/p/AepGgQkOd7:prog.go:25: cannot use NullFloat64 literal (type NullFloat64) as type encoding.TextMarshaler in assignment:    NullFloat64 does not implement encoding.TextMarshaler (wrong type for MarshalText method)        have MarshalText() []byte        want MarshalText() ([]byte, error)将您的方法更改为func (nf NullFloat64) MarshalText() ([]byte, error) {    if nf.Valid {        nfv := nf.Float64        return []byte(strconv.FormatFloat(nfv, 'f', -1, 64)), nil    } else {        return []byte("null"), nil    }}
随时随地看视频慕课网APP

相关分类

Go
我要回答