4

我对为什么第 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
}
4

1 回答 1

5

这是因为 Int 是具有未导出字段的结构。当您将结构按值传递给函数时,您正在制作它的副本。Go 规范指出,这是合法的

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

于 2010-03-05T19:43:22.323 回答