在Go中取消引用指针

Dij*_*tra 4 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
}
Run Code Online (Sandbox Code Playgroud)

Eva*_*haw 5

这是因为Int是一个带有未导出字段的结构.当您通过值将结构传递给函数时,您正在复制它.在围棋规范指出,这个是合法的

...要么必须导出T的所有字段,要么赋值必须在声明T的同一个包中.换句话说,只有当结构的每个字段都可以由程序单独合法分配时,才能将struct值赋给struct变量.