我很困惑为什么第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
}
答案 0 :(得分:5)
这是因为Int是一个带有未导出字段的结构。当您通过值将结构传递给函数时,您正在复制它。 Go spec声明这是合法的
...... T的所有字段都必须是 导出,或者分配必须在 与T相同的包装 声明。换句话说,一个结构 value可以分配给结构 变量只在每个字段都有 struct可以合法分配 由程序单独完成。