为了账号安全,请及时绑定邮箱和手机立即绑定

等号指针不同?

等号指针不同?

Go
偶然的你 2021-08-16 16:18:43
这段代码从同一个指针创建了两个接口变量。打印件表明它们是相同的指针(与存储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 }


查看完整回答
反对 回复 2021-08-16
  • 2 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信