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)
给出结果类型”下的“类型开关”规范。不要期望不真实的事情。该语言根据规范而不是您的期望工作。该规范在类型开关方面有很好的示例。