没有任何的私有、公有关键字, 通过大小写来实现(大写开头的为公有,小写开头的为私有),方法也同样适用这个原则。
记住 struct 中的字段尽量都是用大写字母开头,否则的话, 在进行反射操作 reflect 时会造成外部无法访问到变量内容的故障, 并且编译器不会提示
一个简单的工人类型
type worker struct{
Name string
WorkNO string
}
简单工人类型的初始化操作
// 只是进行初始化,不对结构体进行赋值
var oneworker worker
// 按照字段名称来进行初始化
//这样不需要遵守 定义字段时的顺序
Oneworker := worker{
"Name": "kiki" ,"WorkNo":"20200619" }
//按照定义字段时候的顺序来进行初始化
Oneworker := worker{
“kiki”,“20200619”}
匿名字段
一个简单的 经理 类型: 包含工人的所有特征,但是还拥有工人没有的字段名称
type manager struct{
worker
position string // 职位
}
此时manager 不仅仅包含 position 的属性, worker 结构体的所有字段
初始化的时候也可以直接按照 worker 来初始化,并添加 position 属性
Onemanager := manager{ worker{“kiki”,“20200619”} , “ceo” }
字段重载
当 两个 结构体的字段名称冲突时遵守外层访问优先原则
// struct 的 方法
type Box struct {
Width string
Height string
Depth string
Color string
}
// 当不需要修改 box 的值的时候,使用 Box
func (b Box) Volume() float64 {
return b.Width * b.Height * b.Depth
}
// 当需要修改值得时候 采用 * point 指针进行访问
func (b *Box) SetColor(c Color) {
b.Color = c
}
func (接受者的类型) 函数名 (参数) (返回值)
结构体的方法,可以跟随 匿名字段一起被继承
没有任何的私有、公有关键字,通过大小写来实现(大写开头的为公有,小写开头的为私有),方法也同样适用这个原则。