猿问

golang 结构属性为 nil

我有一个结构


type Result struct {

    Foo *string

}

我想得到一个像


{“富”:空}


我如何实现这一目标?


我尝试了一些事情: 方法 1:


var res1 *Result

json.Unmarshal(nil, &res1)

方法二


var res1 Result

res1.Foo = nil

我得到一个 Foo 为 nil 的 res1 结构


感谢帮助!


编辑:var res1 *Result -> var res1 结果


慕妹3242003
浏览 154回答 1
1回答

繁花如伊

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函数:Unmarshalvar r Resulterr := json.Unmarshal([]byte(`{ "Foo" : null }`), &r)if err != nil { /* ... */ }// now f contains the desired data要从Result结构转换为上述 JSON 字符串,可以使用json库函数:Marshalvar r Result // Foo will be zero'd to niljsonStr, err := json.Marshal(&r)if err != nil { /* ... */ }// now jsonStr contains `{ "Foo" : null }`下面是在Go Playground中运行的上述两个代码块。
随时随地看视频慕课网APP

相关分类

Go
我要回答