结构体--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语言学习笔记

go语言学习笔记 — 基础 — 复合数据类型 — 结构体:定义结构体

go语言学习笔记 — 基础 — 复合数据类型 — 结构体:结构体方法(行为)

go语言结构体及方法的一些细节笔记

go语言学习笔记 — 基础 — 复合数据类型 — 结构体:如何在包中引用另外一个包的结构体?