什么是myVariable。(类型)'准确地回来?

时间:2017-05-31 13:46:16

标签: 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
    }
}

您可以运行here

在switch语句里面的Test方法中,我创建了一个新变量,它是我的参数类型。 为什么我的变量' b'更新此指针后更新。为什么这个新变量指向旧变量?

程序执行的结果是

10
10

但预计

5
5

更新

我想确切地提出这个问题。我没有将指针分配给' b'变量' r'在测试中。 我希望

 r := result.(type)

给出了结果的类型。但是,为什么我改变新变量结果的指针值也会改变

更新2

根据建议,我再次检查了一个规格,但没有找到答案。在下一个建筑

switch r := result.(type) {
    case *int:
        *r = 10
}

result.(type)完全返回什么?

  

类型开关比较类型而不是值。否则它是相似的>到一个表达式开关。它由特殊的开关表达式标记,>具有使用保留字类型而不是>的类型断言的形式实际类型:

     

切换x。(类型){   //案例   }

1 个答案:

答案 0 :(得分:0)

请参阅有关类型断言herehere的信息。

go here中有很好的指针描述。

在你的代码中,a表示a和b的地址返回指向int(* int)的指针。

在Test函数中,您要将值10存储在r。

指向的内存位置