为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕森卡 2021-11-08 19:00:02
我试图在使用 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/a01cadcbb5dc7c797c3eCSV 转储功能仅可以获取和输出值,但不确定如何为 JSON 获得这种效果。使用 sql.NullFloat64 或自定义类型 NullFloat64 给出相同的结果。
查看完整描述

1 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

你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

    }

}


查看完整回答
反对 回复 2021-11-08
  • 1 回答
  • 0 关注
  • 183 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信