package main
import "fmt"
//定义一个结构体,存储学生信息
//要想被不同的包调用结构体,则结构体的名字首字母要大些,里面的变量名也要大写
type Student struct {
//和变量定义不同,不要写var关键字
Id int
Name string
Sex byte
Age int
Addr string
}
type Person struct {
//继承student结构体
*Student //所谓匿名字段,就是只写结构体(变量)名字,而不写其类型
Hobby string
Country string
}
func main() {
p1 := Person{&Student{1, "zhao", 'm', 24, "js"}, "basketball", "china"}
fmt.Println("p1=", p1) //p1= {10a957e00x basketball china}
//同过.运算来操作指针继承对象
fmt.Printf("p1.Id=%d,p1.Name=%s ", p1.Id, p1.Name) //p1.Id=1,p1.Name=zhao
//声明一个指针类型的结构体类型
var p2 Person
p2.Student = new(Student) //给指针开辟一个空间
//p2.Name和(*p).Name是等价的
p2.Name = "steven"
p2.Age = 22
p2.Sex = 'w'
p2.Hobby = "pingpang"
fmt.Println(p2.Name, p2.Age, p2.Sex, p2.Hobby) //steven 22 119 pingpang
}