隐藏零值,理解金刚在这里失败的原因我不明白如何正确地保证某件事不是nil在这种情况下:package main
type shower interface {
getWater() []shower}type display struct {
SubDisplay *display}func (d display) getWater() []shower {
return []shower{display{}, d.SubDisplay}}func main() {
// SubDisplay will be initialized with null
s := display{}
// water := []shower{nil}
water := s.getWater()
for _, x := range water {
if x == nil {
panic("everything ok, nil found")
}
//first iteration display{} is not nil and will
//therefore work, on the second iteration
//x is nil, and getWater panics.
x.getWater()
}}我找到的唯一方法是检查这个值是否真的nil是通过反射。这真的是想要的行为吗?还是我没有看到代码中的一些重大错误?在这里播放链接
2 回答
慕莱坞森
TA贡献1810条经验 获得超4个赞
a
var a *int // nil
b
a
.
var b **intb = &a // not nil
b
b
address | name | value1000000 | a | 02000000 | b | 1000000
a
nil
b
a
(1000000).
就像指针一样,指向零指针的接口本身不会是零。.
添加回答
举报
0/150
提交
取消