これと同じ質問が、この Go コースで次のように提示されます。
[...]エクスポートされたフィールドを持つプライベート タイプを使用することもできます。演習: それはいつ役に立つの?
ここに示すように、パッケージの内部として定義された要素に外部からアクセスできますが、直接アクセスすることはできません。例の構造「ポイント」の場合、次のようにポイントの要素に直接アクセスできないことを意味します
// geometry.go
package geometry
type point struct {
X, Y int
}
// main.go
package main
import (
"fmt"
"./geometry"
)
func main() {
point := geometry.point{
X: 10,
Y: 20
}
fmt.Printf("Point: %#v\n", point)
}
ただし、次のように、定義されたポイントを使用して、エクスポートされた内部要素を使用する要素をエクスポートできます。
// geometry.go
package geometry
type point struct {
X, Y int
}
//Vector ...
type Vector struct {
Start point
End point
}
// main.go
package main
import (
"fmt"
"./geometry"
)
func main() {
vector := geometry.Vector{}
vector.Start.X = 10
vector.Start.Y = 10
vector.End.X = 10
vector.End.Y = 10
fmt.Printf("Vector: %#v\n", vector)
}
結果 -> ベクトル: geometry.Vector{Start:geometry.point{X:10, Y:10}, End:geometry.point{X:10, Y:10}}
したがって、私の見解では、このメカニズムは、内部データ構造を柔軟に宣言できるようにすることを目的としています。