结构体--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)
}

你可能感兴趣的:(golang)