32_匿名字段的使用

Posted zhaopp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了32_匿名字段的使用相关的知识,希望对你有一定的参考价值。

匿名字段相当于c语言里面的继承,即在结构体中继承父结构体,只需要写父结构体的结构体名字,不写结构体的类型

实例如下:
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() {
	//顺序初始化,如果包含另一个结构体,则需要表明属于哪个结构体 eg:Student{1, "zhao", ‘m‘, 24, "js"}
	p := Person{Student{1, "zhao", ‘m‘, 24, "js"}, "song", "china"}
	fmt.Println(p)
	//p1 := Person{1, "zhao", ‘m‘, 24, "js", "song", "china"}//报错,表明字段都属于Person

	//部分初始化,里面的结构,要注意如何初始化
	p2 := Person{Student: Student{Id: 2, Name: "mike"}, Hobby: "running"}
	fmt.Println("p2===>", p2)
	//%+v,可以详细打印结构体成员
	fmt.Printf("p2=%+v
", p2)
	//p2={Student:{Id:2 Name:mike Sex:0 Age:0 Addr:} Hobby:running Country:}

	//成员操作
	p.Addr = "zg"
	fmt.Println(p.Addr)
	//操作继承来的成员
	p.Id = 2
	fmt.Println(p.Id)
	//可以给继承结构体整体赋值
	p.Student = Student{3, "li", ‘w‘, 23, "hb"}
	fmt.Println("p==>", p)

}

以上是关于32_匿名字段的使用的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段

37_匿名字段方法的继承

Go中的"继承"之struct的匿名字段

Go中匿名字段的方法继承与方法重写

Go中的"继承"之struct的匿名字段2

匿名类