定义结构体

type Student struct {
	id	int
	name string
	sex	byte
	age int
	address	string
}

实例

// 定义一个结构体
type Student struct {
	id	int
	name string
	sex	byte
	age int
	address	string
}

func main() {
	// 顺序初始化,每个成员必须初始化
	var s1 Student = Student{1, "panghu", 'm', 18, "china"}
	fmt.Println(s1)	// 输出{1 panghu 109 18 china}

	// 指定成员初始化,没有初始化的成员,自动赋值为0
	s2 := Student{name: "panghu2", id: 2}
	fmt.Println(s2)	// 输出{2 panghu2 0 0 } 

	//结构体指针变量初始化
	var p1 *Student = &Student{1, "panghu", 'm', 18, "china"}
	fmt.Println(*p1) // 输出{1 panghu 109 18 china}
}

结构体普通变量

// 定义一个结构体
type Student struct {
	id	int
	name string
	sex	byte
	age int
	address	string
}

func main() {
	// 定义一个普通结构体变量
	var s Student
	// 操作成员,需要使用(.)运算符
	s.id = 1
	s.name = "panghu"
	s.sex = 'm'
	s.age = 18
	s.address = "china"
	fmt.Println(s)	// 输出{1 panghu 109 18 china}
	// 通过new申请一个结构体
	p2 := new(Student)
	p2.id = 1
	p2.name = "miku"
	fmt.Println(*p2) // 输出{1 miku 0 0 }
}

结构体做函数参数(址传递)

// 定义一个结构体
type Student struct {
	id	int
	name string
	sex	byte
	age int
	address	string
}

func test01(s *Student) {
	s.id = 111
	fmt.Println(s)	// {111 panghu 109 18 china}
}

func main() {
	s := Student{1, "panghu", 'm', 18, "china"}
	test01(&s)
	fmt.Println(s)	// {111 panghu 109 18 china}
}

匿名字段

type Person struct {
	name string
	sex byte
	age int
}
type Student struct {
	Person // 只有类型,没有名字,匿名字段,继承Person的成员
	id int
	address string
}
func main() {
	// 顺序初始化
	var s1 Student = Student{Person{"panghu", 'm', 18}, 1, "china"}
	fmt.Println(s1)	// {{panghu 109 18} 1 china}
}

非结构体匿名字段

type myAddress string // 自定义类型
type Person struct {
	name string
	sex byte
	age int
}
type Student struct {
	Person // 只有类型,没有名字,匿名字段,继承Person的成员
	int
	myAddress
}
func main() {
	s  := Student{Person{"panghu", 'm', 18}, 1, "china"}
	fmt.Println(s)	// {{panghu 109 18} 1 china}
}

方法

type Person struct {
	name string
	sex byte
	age int
}
// 带有接收者的函数叫方法
func (tmp Person) PrintInfo() {
	fmt.Println(tmp)	// 输出{panghu 109 18}
}

func main() {
	p := Person{"panghu", 'm', 18}
	p.PrintInfo()
}

方法的继承

type Person struct {
	name string
	age int
}

type Student struct {
	Person	// 匿名字段
	address string
}

func main() {
	v := Student{Person{"panghu", 18}, "china"}
	fmt.Println(v)
}

方法值


type Person struct {
	name string
	age int
}

func (p Person) GetInfo() {
	fmt.Println("i am GetInfo")
}

func main() {
	p := Person{"name", 18}
	v := p.GetInfo
	v()	// 等价于p.GetInfo()
}