Pointers 什么是';myVariable.(类型)和#x27;准确返回?
我创建了一个简单的代码Pointers 什么是';myVariable.(类型)和#x27;准确返回?,pointers,go,switch-statement,Pointers,Go,Switch Statement,我创建了一个简单的代码 package main import ( "fmt" ) func main() { a := 5 b := &a Test(b) fmt.Println(a) fmt.Println(*b) } func Test(result interface{}){ switch r := result.(type) { case *int: *r = 10
package main
import (
"fmt"
)
func main() {
a := 5
b := &a
Test(b)
fmt.Println(a)
fmt.Println(*b)
}
func Test(result interface{}){
switch r := result.(type) {
case *int:
*r = 10
}
}
你可以运行它
在testmethodinsideswitch语句中,我创建了一个新变量,它是我的参数类型。
为什么我的变量“b”在更新此指针后更新。为什么这个新变量指向旧变量
程序执行的结果是
10
10
但预料
5
5
更新
我想精确地回答这个问题。我并没有在测试中将指向“b”的指针分配给变量“r”。
我想
r := result.(type)
给我结果的类型。但若我改变一个新变量指针的值,为什么结果也会改变呢
更新2
正如我建议的那样,我再次检查了一个规范,但没有找到答案。在下一次施工中
switch r := result.(type) {
case *int:
*r = 10
}
结果是什么。(键入)
返回的是什么
类型开关比较类型而不是值。它在其他方面类似于>表达式开关。它由一个特殊的开关表达式标记,该表达式>具有使用保留字类型而不是>实际类型的类型断言形式:
开关x(类型){
//案例
}
请参阅有关类型断言和属性的信息 围棋中有很好的指针描述 在代码中&a表示a的地址,b返回指向int(*int)的指针
在测试函数中,您是说将值10存储在r指向的内存位置。
r
指向a
,因为您传递了指向a
的指针。你能解释一下,当你把指针传递给测试函数时,为什么你希望指针以某种方式改变值吗?Jim在正文中回答了这些问题。为了回答标题中的问题,类型断言将输入值作为给定类型返回,如规范中所述:您没有将指向b
的指针分配给r
,而是将指向a
的指针分配给r
。另请参见“我期望r:=result.(Type)
给出结果类型”下的“类型开关”规范。不要期望不真实的事情。该语言根据规范而不是您的期望工作。该规范在类型开关方面有很好的示例。