对于不可导出(引入)字段的理解——小写字母开头的结构体名称与成员名称
实现跨包创建结构体实例(变量)——当结构体变量首字母小写时,无法直接引入
当结构首字母小写时,类似private(不可导出字段),只能在包内使用,无法跨包使用
通过工厂模式解决:
// 以下为model
type student struct {
Name string
Score float64
}
func NewStudent(n string, s float64) *student {
return &student {
Name : n,
Score : s,
}
}
// 以下为main
import (
"Project1/model"
"fmt"
)
func main() {
var stu = model.NewStudent("Tom", 78.9) // 在这里可以直接创建结构体实例
fmt.Println(*stu)
fmt.Println(stu.Name)
}
如果Score字段的首字母小写,则其他包依然不可以进行直接访问(再次类似于其余面向对象语言中的private属性,此时需要进行定义一个get方法来获取到此字段)
// 以下是model
type student struct {
Name string
score float64
}
func (s s*student) GetScore() float64 {
return s.score
}
// 以下为main
import (
"Project1/model"
"fmt"
)
func main() {
var stu = model.NewStudent("Tom", 78.9)
fmt.Println(*stu)
fmt.Println(stu.GetScore()) // 在这里可以进行正常引用私有字段
}
通过以上这些代码实现以及于其他语言的类比思想,小写字段更像是private属性。但与其他语言不同的是,Go语言中的结构体也可以作为不可导出字段(类似于private)。其结构体成员通过首字母是否大写的方式,进行判断是否为不可导出字段(private)。