结构体--Go语言学习笔记
Posted 旧时星空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构体--Go语言学习笔记相关的知识,希望对你有一定的参考价值。
结构体–Go语言学习笔记
结构体:是由一系列具有相同类型或不同类型的数据构成的数据集合,结构体成员是由一系列的成员变量构成,这些成员变量也被称为“字段”。
定义结构体
type Person struct{
name string
age int
sex string
address string
}
结构体的初始化
方法一:
func main(){
var p1 Person
fmt.Println(p1)//{ 0 }
p1.name="王二狗"
p1.age=30
p1.sex="男"
p1.address="北京市"
fmt.Println(p1)//{王二狗 30 男 北京市}
}
方法二:
p2:=Person{}
p2.name="Rubby"
p2.age=28
p2.sex="女"
p2.address="上海市"
fmt.Println(p2)//{Rubby 28 女 上海市}
方法三:
p3:=Person{
name:"如花"
age:40
sex:"女"
address:"武汉市"
}
fmt.Println(p3)//{如花 40 女 武汉市}
方法四:
p4:=Person{"李小花",25,"女","address"}
结构体是值类型数据
结构体指针
var pp1 *Person
pp1=&p1
fmt.Println(pp1)
fmt.Printf("&p,%T\\n",pp1,pp1)//pp1地址,*main.Person--pp1的数据类型
fmt.Println(*pp1)//{王二狗 30 男 北京市}
pp1.name="王五"
fmt.Println(pp1)//&{王二狗 30 男 北京市}
fmt.Println(p1)//{王二狗 30 男 北京市}
使用内置函数new(),go语言中专门用来创建某种类型的指针的函数
pp2:=new(Person)
fmt.Printf("%T\\n",pp2)//*main.Person
//(*pp2).name=..
pp2.name="Jerry"
pp2.age=20
pp2.sex="男"
pp2.address="上海市"
fmt.Println(pp2)//&{Jerry 20 男 上海市}
new()创建各种数据类型的指针,不是nil,不是空指针,存储的是零值
pp3:=new(int)
fmt.Println(pp3)//地址值
fmt.Println(*pp3)//0
匿名结构体
变量名:=struct{
定义字段Field
}{
字段进行赋值
}
s2:=struct{ //赋值变量
name string //自定义结构体
age int
}{
name:"李四" //结构体初始化
age:19
}
fmt.Println(s2.name,s2.age)//李四,19
匿名字段–将数据类型作为字段名称,所以每个数据只能有一个
type Worker struct{
string//匿名字段
age
}
func main(){
s1:=worker{"李小花",21}
fmt.Println(s1)//{李小花,21}
}
提升字段
结构体1中的一个匿名字段是一个结构体2,结构体2的字段就是结构体1的提升字段。好处是:结构体1可以直接访问结构2的字段或者说属性。
type Person{
name string
age int
}
type Student{
Person
school string
}
func main(){
var s1 student
s1.Person.name="王五"
s1.Person.age=19
s1.school="北京大学"
s1.name="孙武"//直接赋值,不用.Person.name=..
s1.age=34
s1.school="春秋"
}
结构体嵌套
type Address struct{
city,state string
}
type Person struct{
name string
age int
address Address
}
func main(){
var p Person
p.name="Naveen"
p.age=50
p.address=Address{
city:"chicago",
state:"Illinois",
}
fmt.Println("Name:",p.name)
fmt.Println("Age:",p.age)
fmt.Println("City:",p.address.city)
fmt.Println("state:",p.address.state)
}
以上是关于结构体--Go语言学习笔记的主要内容,如果未能解决你的问题,请参考以下文章
go语言学习笔记 — 基础 — 复合数据类型 — 结构体(10.1):隐藏结构体与跨包引用结构体
go语言学习笔记 — 基础 — 复合数据类型 — 结构体:定义结构体