在Go中取消引用指针

时间:2010-03-05 18:06:45

标签: pointers go

我很困惑为什么第15行无效。为什么不能将指向big.Int的指针解除引用,而指向int的指针可以?

package main

import (
    "fmt"
    "big"
)

func main() {
    var c *int = getPtr()
    fmt.Println(c)
    fmt.Println(*c)

    var d *big.Int = big.NewInt(int64(0))
    fmt.Println(d)

    // does not compile - implicit assignment of big.Int
    // field 'neg' in function argument
    //fmt.Println(*d)
}

func getPtr() *int {
    var a int = 0
    var b *int = &a
    return b
}

1 个答案:

答案 0 :(得分:5)

这是因为Int是一个带有未导出字段的结构。当您通过值将结构传递给函数时,您正在复制它。 Go spec声明这是合法的

  

...... T的所有字段都必须是   导出,或者分配必须在   与T相同的包装   声明。换句话说,一个结构   value可以分配给结构   变量只在每个字段都有   struct可以合法分配   由程序单独完成。