7.使用结构体和指针

结构体是什么

type Movie struct {
    Name string
    Rating float32
}
  • 关键字type指定一种新类型
  • 将新类型的名称指定为Movie
  • 类型名右边是数据类型,这里为结构体
  • 在大括号内,使用名称和类型指定了一系列数据字段

创建结构体

type Movie struct{
    Name stirng
    Rating float32
}

#创建结构体变量
var m Movie

如果没有初始化,创建结构体时,则Go将会把每个数据字段设置为相应数据类型的零值

//给结构体赋值
m.Name="me"
m.Rating=0.99
package main

import "fmt"

func main(){
    type Movie struct{
        Name string
    }

    var a Movie

    a.Name = "me"

    fmt.Println(a)
}

// {me}

可以使用new来创建结构体

type movie struct{
    Name string
}

//创建结构体
m = new(movie)

//使用简短变量赋值来创建结构体
c := movie{Name : "me" }

//使用简短变量赋值
c := movie("me")

嵌套结构体

type superhero struct{
    Name string
    Address address
}

type address struct{
    Number int
}

自定义结构体数据字段的默认值

在有些时候,我们可以通过函数的方式来给结构体创建默认值

package main

import "fmt"

type superhero struct{
    Name string
}

func newSuperhero() superhero{
    a := superhero{Name:"siqu"}
    return a
}

func main(){
    fmt.Printf("%+v\n",newSuperhero())
}

// {Name:siqu}

比较结构体

当结构体类型相同的时候才能进行比较,不相同时不能进行比较,否则会发生错误

理解共有和私有值

根据GO语言约定,结构体及其数据字段都可能被导出,也可能不导出,如果一个标识符的首字母是大写的,那么它将被导出;否则不会导出

要导出结构体及其字段,结构体及其字段的名称都必须以大写字母打头

区分指针引用和值引用

package main

import "fmt"

type superhero struct{
    Name string
}

func main(){
    //复制一个相同的结构体
    a := superhero{Name : "siqu"}

    b := a

    fmt.Println("结构体a:",a)
    fmt.Println("结构体b",b)

    b.Name ="boke"
    fmt.Println("结构体a:",a)
    fmt.Println("结构体b",b)

}

// 结构体a: {siqu}
// 结构体b {siqu}
// 结构体a: {siqu}
// 结构体b {boke}

由结果可知,使用b :=a 的方式,是获得结构体的一个副本,而不是另外一个引用

package main

import "fmt"

type superhero struct{
    Name string
}

func main(){
    //复制一个相同的结构体
    a := superhero{Name : "siqu"}

    b := &a

    fmt.Println("结构体a:",a)
    fmt.Println("结构体b",b)

    b.Name ="boke"
    fmt.Println("结构体a:",a)
    fmt.Println("结构体b",*b)

}
// 结构体a: {siqu}
// 结构体b &{siqu}
// 结构体a: {boke}
// 结构体b {boke}

可以利用&符号获取指针引用

© 版权声明
THE END
喜欢就支持以下吧
点赞0
分享
评论 抢沙发
四曲的头像-四曲博客

昵称

取消
昵称表情代码图片