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

golang 结构属性为 nil

golang 结构属性为 nil

Go
慕妹3242003 2023-02-14 15:24:30
我有一个结构type Result struct {    Foo *string}我想得到一个像{“富”:空}我如何实现这一目标?我尝试了一些事情: 方法 1:var res1 *Resultjson.Unmarshal(nil, &res1)方法二var res1 Resultres1.Foo = nil我得到一个 Foo 为 nil 的 res1 结构感谢帮助!编辑:var res1 *Result -> var res1 结果
查看完整描述

1 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

Go 中的基本类型是不可空的。string是一个基本类型。


为了可以Foo为空,一种解决方案是使它成为一个字符串指针。那看起来像这样:


type Result struct {

    Foo *string

}

如果你不喜欢nil,你也可以添加一个布尔字段来解释是否Foo存在:


type Result struct {

    Foo string

    IsPresent bool // true if Foo is present. false otherwise.

}

但是您需要为此编写自定义 JSON 反序列化器。所以Foo我会做的就是做一个指针。


在问题更改为提及 OP 已经在使用后进行编辑*string:

要从 JSON 字符串转到{ "Foo" : null }我Result的回答中上面列出的 Go 结构,可以使用jsonpackage函数:Unmarshal


var r Result


err := json.Unmarshal([]byte(`{ "Foo" : null }`), &r)

if err != nil { /* ... */ }


// now f contains the desired data

要从Result结构转换为上述 JSON 字符串,可以使用json库函数:Marshal


var r Result // Foo will be zero'd to nil


jsonStr, err := json.Marshal(&r)

if err != nil { /* ... */ }


// now jsonStr contains `{ "Foo" : null }`

下面是在Go Playground中运行的上述两个代码块。



查看完整回答
反对 回复 2023-02-14
  • 1 回答
  • 0 关注
  • 153 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号