这段代码从同一个指针创建了两个接口变量。打印件表明它们是相同的指针(与存储s和 的副本相反s2)。然而,最后一个打印说明i1与i2. 为什么?package mainimport "fmt"func main() { var s T = &struct{string}{} var s2 *struct{string} = s var i1 interface{} = s var i2 interface{} = s2 fmt.Println(s) s.string = "s is i1" fmt.Println(i1) s.string = "s is i2" fmt.Println(i2) fmt.Println(i1==i2)}type T *struct{string}$ go run a.go&{}&{s is i1}&{s is i2}false
2 回答
慕森卡
TA贡献1806条经验 获得超8个赞
以下是 Go 语言规范关于比较接口值的说明:
如果两个接口值具有相同的动态类型和相等的动态值,或者两者的值为 nil,则它们相等。
中的值i1
具有命名类型T
。中的值i2
具有匿名类型*struct{string}
。由于两个值具有不同的动态类型,因此接口值不相等。
要查看类型,请将此行添加到您的程序中:
fmt.Printf("i1: %T, i2: %T\n", i1, i2)
这一行将打印:
i1: main.T, i2: *struct { string }
- 2 回答
- 0 关注
- 178 浏览
添加回答
举报
0/150
提交
取消