当前位置: 首页 > 面试题库 >

在Go中拆封时如何识别无效值和未指定的字段?

越开畅
2023-03-14
问题内容

我想知道是否可以区分void值和未指定的字段值。

这是一个例子:

var jsonBlob = []byte(`[
    {"Name": "A", "Description": "Monotremata"},
    {"Name": "B"},
    {"Name": "C", "Description": ""}
]`)

type Category struct {
    Name  string
    Description string
}

var categories []Category
err := json.Unmarshal(jsonBlob, &categories)

if err != nil {
    fmt.Println("error:", err)
}
fmt.Printf("%+v", categories)

也可以在这里找到:https://play.golang.org/p/NKObQB5j4O

输出:

[{Name:A Description:Monotremata} {Name:B Description:} {Name:C Description:}]

因此,在此示例中,是否可以将类别B中的描述与类别C中的描述区分开?

我只是希望能够区分它们以在程序中具有不同的行为。


问题答案:

如果将字段类型更改为指针,则可以区分空值和缺失值。如果该值存在于JSON中且带有空字符串值,则它将被设置为指向空字符串的指针。如果它不存在于JSON中,它将被保留nil

type Category struct {
    Name        string
    Description *string
}

输出(在Go Playground上尝试):

[{Name:A Description:0x1050c150} {Name:B Description:<nil>} {Name:C Description:0x1050c158}]


 类似资料:
  • 问题内容: 我想解析Go中的JSON对象,但想为未指定的字段指定默认值。例如,我具有struct类型: A,B和C的默认值分别是“ a”,“ b”和“ c”。这意味着当我解析json时: 我想得到的结构: 使用内置包可以吗?否则,是否有任何具有此功能的Go库? 问题答案: 使用encoding / json可以实现:调用时,不需要给它一个空结构,可以给它一个默认值。 例如: 在Go操场上运行此示例

  • 问题内容: 有没有一种方法可以指定JAXB在XML模式中用于编组/解编对象的适配器? 例如,如果我想将以下内容解析为整数: 我可以在架构中使用以下内容: 当我通过XJC工具运行模式时,应使用Integer.decode()作为值为0x1234的Integer或十进制4660来解码字符串“ 0x1234”。生成的Adapter类正确反映了这一点: 但是,当我想将值编组回XML元素(这是String文

  • 问题内容: 我需要做什么 我有一个不了解时区的datetime对象,我需要向其添加一个时区,以便能够将其与其他时区感知的datetime对象进行比较。对于这一旧情况,我不想将我的整个应用程序转换为时区。 我尝试过的 首先,演示问题: 首先,我尝试了astimezone: 这次失败并不令人惊讶,因为它实际上是在尝试进行转换。替换似乎是一个更好的选择(根据Python:如何获取“时区感知”的datet

  • 问题内容: 有什么好的方法可以帮助您识别项目中未使用的CSS定义?一堆css文件被拉进来了,现在我正在尝试清理一些东西。 问题答案: Chrome开发者工具有一个“ 审核”标签,其中可以显示未使用的CSS选择器。 运行审核,然后在“ 网页性能”下,参阅“ 删除未使用的CSS规则”

  • 我在IntellijIDEA中有一个项目是用Maven创建的。然后我在pom.xml文件中指定了一组依赖项和外部存储库。 如果我执行“mvn install”,那么项目在命令行上构建得很好。但是,当我打开IDE中的任何代码文件时,它会说Maven依赖项处理的所有类都无法识别--如果我从未将所需的JAR添加到构建路径中,这对于一个正常的项目来说是一样的。 我知道在我的Eclipse Maven项目(

  • (免责声明:这个异常已经在许多其他线程中报告过了,是的,我已经搜索了一下,试图找到解决我这个问题的方法!!) 我有一个WPF应用程序,其中WPF Toolkit DatePicker控件绑定到DateTime变量: 每当我输入日期(如4/20/2012)时,DatePicker控件似乎认为它实际上是英国日期格式(DD/MM/YYYY),并且WPFtoolkit源代码抛出“String未被识别为有效