这个 Go 课程中提出了同样的问题:
[...]您甚至可能有一个带有导出字段的私有类型。练习:什么时候有用?
如此处所述,您可以从外部访问定义为包内部的元素,但不能直接访问它。对于示例中的结构“point”,这意味着您不能直接访问 point 的元素,如
// 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}}
因此,在我看来,这种机制旨在让您在声明内部数据结构时具有灵活性。