结构体:是由一系列具有相同类型或不同类型的数据构成的数据集合,结构体成员是由一系列的成员变量构成,这些成员变量也被称为“字段”。
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 男 北京市}
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)
}