结构体

结构体是用户定义的类型,表示一系列的集合。语法为 :type关键字  结构体名字 struct{ }

1.结构体声明

type Person struct {
    name  string
    sex  int
    age  int
----------------------------------
    sex,age  int    # 由于age和sex是相同类型的字段,可以定义在同一行
}

2.嵌套结构体

type Person struct {
    name string
    sex ,age int
    hobby Hobby
}

type Hobby struct {
    id int
    name string
}

 3.结构体嵌套+匿名字段

type Person struct {
    name  string
    sex  ,age int
    Hobby

}
type Hobby struct {
    id int
    name  string
}

 4.定义初始化

func main() {
    person  :=Person{}    # 定义没有初始化
    var person Person
    var person Person=Person{name:"lqz"}  # 指名道姓传,可以只传一部分
    var person Person=Person{"lqz",1,19}  # 按位置传,必须要全传
    //person.name="lqz"    # 结构体是值类型,可以通过点(.)方法取值
    fmt.Println(person.name)   # 只有属性,没有方法
}

5.匿名结构体 

a:=struct {
    name string
    age int
    }{"lqz",19}
    fmt.Printf(a.name)    # 取值

6.结构体的零值

p:=Person{name:"lqz"} # 一般用驼峰体来定义变量和函数
pPoint: = &p  
var pPoint *Person=&p
fmt.Println(pPoint)
fmt.Println(pPoint.name)    # 等价于 fmt.Println((*pPoint).name)

 7.结构镶嵌体

package main  

import "fmt"        

func main() {
        p:=Person{name:"lqz",hobby:Hobby{10,"篮球"}}
    p:=Person{name:"lqz",hobby:Hobby{id:10,name:"篮球"}}
    p.hobby.id=101
    fmt.Println(p.hobby.name)

    #结构体嵌套加匿名字段
    p:=Person{name:"lqz",Hobby:Hobby{10,"篮球"}}
    //取p中的hobbyname
    fmt.Println(p.Hobby.hobbyname)
    fmt.Println(p.hobbyname)

    #变量提升过程中如果有重名的,就不提升了
    p:=Person{name:"lqz",Hobby:Hobby{10,"篮球"}}
    fmt.Println(p.Hobby.name)
    fmt.Println(p.name)
}
原文地址:https://www.cnblogs.com/blue-tea/p/12037285.html