因为空字符串是GO string的0/默认值,所以我决定将所有这样的字段定义为interface{}.例如

type student struct {
    FirstName  interface{} `json:"first_name"`
    MiddleName interface{} `json:"middle_name"`
    LastName   interface{} `json:"last_name"`
}

如果特定字段的值不可用,则我发送数据的应用程序预期为null而不是空字符串.

这是正确的方法吗?或者有人能给我指个比这个更好的方法吗?

推荐答案

json package documentation年内:

指针值编码为指向的值.nil指针编码为空JSON对象.

因此,您可以存储一个指向字符串的指针,如果不是nil,它将被编码为字符串,如果是nil,它将被编码为"null"

type student struct {
  FirstName  *string `json:"first_name"`
  MiddleName *string `json:"middle_name"`
  LastName   *string `json:"last_name"`
}

Go相关问答推荐

Golang Cososdb-gremlin连接

在Golang中,@LATEST和@UPGRADE特殊查询有什么不同?

Golang应用程序:所请求的资源上不存在HTTP-Control-Allow-Origin标头

如何在GoFr中为生产和本地环境设置不同的配置?

如何修复 Go 中协议缓冲区定义中重新定义的字段?

如果第一次匹配条件,如何跳过切片中的值

golang testscript .txtar 语法,用于 stderr 或 stdout 中包含的文本

Docker 执行失败并显示cmd/ENTRYPOINT 中的命令未找到

Go test "-run -" 标志执行测试更快

同一文件上的多个 Arrow CSV 阅读器返回 null

更改多对多连接表的名称

errors.Wrap 和 errors.WithMessage 有什么区别

CORS grpc 网关 GoLang

在 Golang 中,如何将接口作为泛型类型与 nil 进行比较?

如何在Golang中的差异函数中杀死命令Exec

显示作为服务帐户身份验证的谷歌日历事件 - Golang App

Go GCP 同时模拟两个服务帐户

将 CSVExport 函数传递给处理程序 Gin

测试包外文件时的 Golang 测试覆盖率

如果在调用 http.Get(url) 时发生错误,我们是否需要关闭响应对象?