Day04
01、匿名字段初始化
package main
import "fmt"
type Person struct {
name string //名字
sex byte //性别
age int //年龄
}
type Student struct {
Person //只有类型,没有名字,匿名字段,继承了Person的成员
id int
addr string
}
func main() {
//顺讯初始化
var s1 Student = Student{Person{"mike", 'm', 22}, 18, "CN"}
fmt.Println(s1)
//自动推导类型
s2 := Student{Person{"bob", 'm', 23}, 19, "CN"}
fmt.Println(s2)
//%+v, 显示更加详细
fmt.Printf("%+v", s2)
//没有赋值的常量自动初始为0
s3 := Student{id: 2}
fmt.Printf("%+v\n", s3)
s4 := Student{Person: Person{name: "mike4"}}
fmt.Printf("%+v", s4)
}
输出信息
{{mike 109 22} 18 CN}
{{bob 109 23} 19 CN}
{Person:{name:bob sex:109 age:23} id:19 addr:CN}{Person:{name: sex:0 age:0} id:2 addr:}
{Person:{name:mike4 sex:0 age:0} id:0 addr:}
02、成员的操作
package main
import "fmt"
type Person struct {
name string //名字
sex byte //性别
age int //年龄
}
type Student struct {
Person //只有类型,没有名字,匿名字段,继承了Person的成员
id int
addr string
}
func main() {
s1 := Student{Person{"mike", 'm', 22}, 18, "CN"}
s1.name = "testname"
s1.id = 12
s1.Person = Person{"zh", 'm', 21}
fmt.Println(s1.name, s1.age, s1.id)
}
输出
zh 21 12
03、同名字段
package main
import "fmt"
type Person struct {
name string //名字
sex byte //性别
age int //年龄
}
type Student struct {
Person //只有类型,没有名字,匿名字段,继承了Person的成员
id int
addr string
name string //和Person 中的name重名了
}
func main() {
var s1 Student // 定义一个变量
//默认规则(就近原则),如果能在本作用域找到次成员,就操作此成员
s1.name = "Bob"
s1.id = 21
s1.age = 23
fmt.Printf("%+v \n", s1)
//操作Person中的name
s1.Person.name = "Mike" //显示调用
fmt.Printf("%+v", s1)
}
输出
{Person:{name: sex:0 age:23} id:21 addr: name:Bob}
{Person:{name:Mike sex:0 age:23} id:21 addr: name:Bob}
04、非结构体字匿名段
输出