Nan*_*ank 0 pointers interface go address-operator
在以下代码中
var a int
var b interface{}
b = a
fmt.Printf("%T, %T \n", a, &a)
fmt.Printf("%T, %T \n", b, &b)
Run Code Online (Sandbox Code Playgroud)
输出:
int, *int
int, *interface {}
Run Code Online (Sandbox Code Playgroud)
我希望&b的类型是int的指针.
我有两个问题:
1)为什么它是接口{}上的指针?
2)我怎样才能获得原始类型的指针?
&b=>这是应用于变量的地址运算符b,其类型为interface{}.所以&b将是一个指向*interface{}变量的类型指针b.如果采用类型变量的地址T,结果将始终为类型*T.
你不能获得变量的地址a从b,因为赋值:
b = a
Run Code Online (Sandbox Code Playgroud)
只需将值复制a到b.它包装了a类型的接口值中的值interface{},并将此接口值存储到其中b.此值完全脱离a.
通常,所有分配都会复制分配的值.Go中没有引用类型.如果你将ain 的地址存储b在第一位,最接近你想要的是,例如:
b = &a
Run Code Online (Sandbox Code Playgroud)
然后你可以使用类型断言来获取这样a的地址b:
fmt.Printf("%T, %T \n", a, &a)
fmt.Printf("%T, %T \n", b, b.(*int))
Run Code Online (Sandbox Code Playgroud)
输出(在Go Playground上试试):
int, *int
*int, *int
Run Code Online (Sandbox Code Playgroud)
(注意:当你只是打印时b,因为它是一个接口类型,fmt包打印包含在其中的(具体)值.)
查看相关问题:
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |