字符串 ""
的 "nil
"值对我来说有意义,但 0
是合法数字。例如,房间中的人数可以是0
,但人名不能是""
。这个约定背后的原因是什么?
(编辑)附加信息:
我想做的是有一种方法来测试是否为数字设置了值。将某人的名字设置为 ""
显然是不正确的,而将整数设置为零可能是合法的。在 go 中是否有解决此类事件的典型方法?
最佳答案
The "
nil
" value for a string""
makes sense to me but0
is a legitimate number.
你的陈述有两个明显的问题:
- 不存在字符串的"
nil
"值。 ""
是完全合法的字符串。
您似乎混淆了 Go 的“零值”概念和 nil。这些概念几乎完全不相关。
- 字符串的零值为
""
。 - 数字的零值为
0
。 - 指针或接口(interface)的零值为
nil
。这是nil
和“零值”真正相互关联的唯一地方。
在 Go 中,其他字符串、数字和其他具体类型永远不会是 nil
。 (指向这些类型的指针可以,但这显然是不同的)。因此,谈论“字符串的零值”或“数字的零值”甚至没有意义。
作为对您编辑的回应,这个问题已经在各种情况下得到了回答。参见 here有关 JSON 解码的示例。不过,简而言之,您必须使用除数字/字符串类型以外的其他类型。使用指针或包装器类型(例如 sql.NullInt64 )。
关于go - 为什么数字 0 的 "nil"值为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46682878/