美文网首页
第五节结构struct

第五节结构struct

作者: barriers | 来源:发表于2019-12-24 21:49 被阅读0次

struct相当于面向对象中的class

1.go中的struct与c中的struct非常相识,并且go没有class;
2.使用type<Name>structP{}定义结构,名称遵循可见性规则;
3.支持指向自身的指针类型成员;
4.支持匿名结构,可用作成员或定义成员变量;
5.匿名结构也可以用于map的值;
6.可以使用字面值对结构进行初始化;
7.允许直接通过指针来读写结构成员;
8.相同类型的成员可进行直接拷贝赋值;
9.支持==或!=比较运算符,但不支持>或<;
10.支持匿名字段,本质上是定义了以某个类型名为名称的字段;
11.嵌入结构作为匿名字段看起来像继承,但不是继承;
12.可以使用匿名字段指针。
13.结构体名本身指向第一个元素的地址(即结构体地址与结构体内第一个属性值的地址相同)
14.结构体是值类型数据

struct可以使用两种方式初始化,即先创建一个结构体(类似对象),用属性赋值,或者直接创建结构体时赋值;
创建指向结构体的指针时,直接在结构体前面加&,就表示创建的是指向结构体的指针;要对属性进行修改时,前面不用加,直接结构体实例.属性,就可以赋值,如a.Age=20;但将指向结构的指针作为参数传递给函数时,函数的形参为定义的结构体,如下面的person,形参前面需要加上

import (
    "fmt"
)

type person struct {
    Name string
    Age int
}

func main(){
    a := person{}
    a.Age = 13
    a.Name = "bob"
    fmt.Println(a)
    b := person{
        Name: "alice",
        Age: 19,
    }
    fmt.Println(b)

    c := &person{
        Name:"joe",
        Age:18,
    }
    fmt.Println(c)
}

匿名结构的结构体

func main(){
    a := struct {
        Name string
        Age int
    }{
        Name: "alice",
        Age: 19,
    }
    fmt.Println(a)

    c := &struct {
        Name string
        Age int
    }{
        Name: "alice",
        Age: 19,
    }
    fmt.Println(c)
}

嵌套结构:嵌套结构中的字段只能使用属性进行赋值,不能用构造结构体赋值

type person struct {
    Name string
    Age int
    Contact struct{
        Phone, City string
    }
}

func main(){
    a := person{Name:"Joe", Age:13}
    a.Contact.Phone = "123123"
    a.Contact.City = "成都"
    fmt.Println(a)

}

匿名结构

匿名结构的结构体:实例化时,值必须与字段类型对应,否则会报错

type person struct {
    string
    int
}

func main(){
    a := person{"Joe",13}
    fmt.Println(a)

}
结构体用==比较,必须使用相同的结构体名创建的结构体,否则会报错

嵌入结构

嵌入结构类型py中的继承;用构造结构体初始化时用 a := teacher{Name:"Joe", Age:18,human:human{Sex:0}}这种方式;
用参数初始化时,方法如下。

type human struct {
    Sex int
}
type teacher struct {
    human
    Name string
    Age int
}
type student struct {
    human
    Name string
    Age int
}

func main(){
    a := teacher{Name:"Joe", Age:18,human:human{Sex:0}}
    b := student{Name:"Joe", Age:21,human:human{Sex:0}}
    fmt.Println(a)
b.Name="area"
b.Age = 22
// 用b.human.Sex=100也可以使用
b.Sex = 100
plt.Println(b)
}

相关文章

网友评论

      本文标题:第五节结构struct

      本文链接:https://www.haomeiwen.com/subject/pjtqoctx.html