go - 为什么数字 0 的 "nil"值为 0?

标签 go

字符串 "" 的 "nil"值对我来说有意义,但 0 是合法数字。例如,房间中的人数可以是0,但人名不能是""。这个约定背后的原因是什么?

(编辑)附加信息:

我想做的是有一种方法来测试是否为数字设置了值。将某人的名字设置为 "" 显然是不正确的,而将整数设置为零可能是合法的。在 go 中是否有解决此类事件的典型方法?

最佳答案

The "nil" value for a string "" makes sense to me but 0 is a legitimate number.

你的陈述有两个明显的问题:

  1. 不存在字符串的"nil"值
  2. "" 是完全合法的字符串。

您似乎混淆了 Go 的“零值”概念和 nil。这些概念几乎完全不相关。

  • 字符串的零值为 ""
  • 数字的零值为 0
  • 指针或接口(interface)的零值为nil。这是 nil 和“零值”真正相互关联的唯一地方。

在 Go 中,其他字符串、数字和其他具体类型永远不会是 nil。 (指向这些类型的指针可以,但这显然是不同的)。因此,谈论“字符串的零值”或“数字的零值”甚至没有意义。


作为对您编辑的回应,这个问题已经在各种情况下得到了回答。参见 here有关 JSON 解码的示例。不过,简而言之,您必须使用除数字/字符串类型以外的其他类型。使用指针或包装器类型(例如 sql.NullInt64 )。

关于go - 为什么数字 0 的 "nil"值为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46682878/

相关文章:

json.Unmarshal 返回空白结构

go - 获取 "parent"goroutine 的堆栈以及 "child"的堆栈

go - 将libstdc++-6.dll解码为libstdc++-6.dll的最快方法

go - JWT 签名方法 HS256 Golang

unit-testing - 如何对 Go Gin 处理程序函数进行单元测试?

go - Mac安装beego失败

go - 中间件执行流程

go - 如何反序列化 Kubernetes YAML 文件

go - Golang 存储库的正确结构

http - 为 HTTP 客户端设置代理