4

15行目が有効でない理由がわかりません。int へのポインターは逆参照できるのに、big.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 に答える