Go 如何将int类型值封送为null

Go 如何将int类型值封送为null,go,Go,因为go有int类型的defalut值,所以如果我定义了一个int类型,并将其推送到struct/map/slice中。。。然后j,:=json.Marshal(资源),它将是0 有没有办法把它变成json字符串中的null 例如: var a int b := []int{a, 1, 2} s, _ := json.Marshal(b) 我的字符串的预期输出是[null,1,2]一种简单的方法是使用*int而不是int package main import (

因为go有int类型的defalut值,所以如果我定义了一个int类型,并将其推送到struct/map/slice中。。。然后
j,:=json.Marshal(资源)
,它将是
0

有没有办法把它变成json字符串中的
null

例如:

    var a int
    b := []int{a, 1, 2}
    s, _ := json.Marshal(b)


我的
字符串的预期输出是
[null,1,2]
一种简单的方法是使用
*int
而不是
int

package main

import (
    "encoding/json"
    "fmt"
)

func createIntPtr(x int) *int {
    return &x
}

func main() {
    var a *int
    b := []*int{a, createIntPtr(1), createIntPtr(2)}
    s, _ := json.Marshal(b)
    fmt.Println(string(s))
}

输出:
[null,1,2]

游乐场:

*int
更合适,因为它的默认值是
nil
。 所以,当它被封送到json时,它将变为null,就像您所期望的那样


helper函数
createIntPtr
只是向整数指针数组添加整数文本的一种方便方法,因为Go不允许获取整数常量的地址。

a
不是空的。它的值是0。对于
[]int{0,1,2}
,您希望得到什么输出?“有没有办法在json字符串中将其设为null?”--没有,不是内置的
int
类型。您必须使用不同的类型,可以是Go
nil
(例如
*int
,或
接口{}
)。或者,您需要定义自己的类型,该类型知道值
0
在封送为json时应转换为
null
(通过实现json.Unmarshaler接口)。