目录
  • 引言
  • 一、定义结构体
    • 1. 语法格式
    • 2. 示例
  • 二、访问结构体成员
    • 三、结构体作为函数参数
      • 四、结构体指针
        • 总结

          引言

          Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型

          结构体是由一系列具有相同类型或不同类型的数据构成的数据集合

          结构体表示一项记录,比如保存图书馆的书籍记录,每本书有以下属性:

          Title :标题

          Author : 作者

          Subject:学科

          ID:书籍ID

          一、定义结构体

          1. 语法格式

          结构体定义需要使用 type 和 struct 语句

          struct 语句定义一个新的数据类型,结构体中有一个或多个成员

          type 语句设定了结构体的名称

          结构体的格式如下

          type struct_variable_type struct {
              member definition
              member definition
              ...
              member definition
           } 

          一旦定义了结构体类型,它就能用于变量的声明,语法格式如下

          variable_name := structure_variable_type {value1, value2...valuen}
          

          或者

          variable_name := structure_variable_type { key1: value1, key2: value2..., keyn: valuen}  
          

          2. 示例

          package main
           
          import "fmt"
           
          type Persion struct {
              name    string
              sex     string
              age     int
              id_card int
          }
           
          func main() {
              //创建一个新的结构体
              fmt.Println(Persion{"zhangsan", "男", 20, 123412424})
              //使用key:value格式
              fmt.Println(Persion{name: "lisi", sex: "女", age: 18, id_card: 133654623})
              //忽略的字段为0或空
              fmt.Println(Persion{name: "wangwu", id_card: 21352365})
          }
          

          输出结果

          {zhangsan 男 20 123412424}
          {lisi 女 18 133654623}
          {wangwu  0 21352365}  

          二、访问结构体成员

          如果要访问结构体成员,需要使用点号.操作符,格式为:

          结构体.成员名"  

          结构体类型变量使用 struct 关键字定义,实例如下:

          package main
           
          import "fmt"
           
          func main() {
              //结构体声明
              type Persion struct {
                  name string
                  age  int
                  sex  string
                  id   int
              }
              //结构体类型的变量
              var (
                  Persion1 Persion //声明 Persion1 为 Persion 类型
                  Persion2 Persion //声明 Persion2 为 Persion 类型
              )
           
              //给prison1赋值
              Persion1.name = "lisi"
              Persion1.sex = "man"
              Persion1.age = 30
              Persion1.id = 56341153
           
              //给prison2赋值
              Persion2.name = "wangwu"
              Persion2.sex = "woman"
              Persion2.age = 18
              Persion2.id = 78238232
           
              fmt.Println(Persion1)
              fmt.Println(Persion2)
          }
          

          输出结果如下

          {lisi 30 man 56341153}
          {wangwu 18 woman 78238232} 

          三、结构体作为函数参数

          结构体也可以作为参数传递给函数,可以解决一些代码的冗余问题,简化代码

          示例

          package main
           
          import "fmt"
           
          //结构体声明
          type Persion struct {
              name string
              age  int
              sex  string
              id   int
          }
           
          func main() {
           
              //结构体类型的变量
              var (
                  Persion1 Persion //声明 Persion1 为 Persion 类型
                  Persion2 Persion //声明 Persion2 为 Persion 类型
              )
           
              //给prison1赋值
              Persion1.name = "lisi"
              Persion1.sex = "man"
              Persion1.age = 30
              Persion1.id = 56341153
           
              //给prison2赋值
              Persion2.name = "wangwu"
              Persion2.sex = "woman"
              Persion2.age = 18
              Persion2.id = 78238232
           
              //使用函数传递结构体
              printInfo(Persion1)
              fmt.Println("------------------")
              printInfo(Persion2)
          }
           
          //函数定义结构体为形式参数,进行传入
          func printInfo(p Persion) {
              fmt.Println("姓名: ", p.name)
              fmt.Println("年龄: ", p.age)
              fmt.Println("性别: ", p.sex)
              fmt.Println("身份证: ", p.id)
          }
          

          输出结果如下

          姓名:  lisi
          年龄:  30
          性别:  man
          身份证:  56341153
          ——————
          姓名:  wangwu
          年龄:  18
          性别:  woman
          身份证:  78238232

          四、结构体指针

          可以定义指向结构体的指针类似于其他指针变量,格式如下

          var struct_pointer *Persion
          

          以上定的指针变量可以存储结构体变量的地址,查看结构体变量的地址,可以将&符合放置于结构体变量前

          struct_pointer = &Persion1
          

          使用结构体指针访问结构体成员,可以使用.操作符

          struct_pointer.title  
          
          package main
           
          import "fmt"
           
          //结构体声明
          type Persion struct {
              name string
              age  int
              sex  string
              id   int
          }
           
          func main() {
           
              //结构体类型的变量
              var (
                  Persion1 Persion //声明 Persion1 为 Persion 类型
                  Persion2 Persion //声明 Persion2 为 Persion 类型
              )
           
              //给prison1赋值
              Persion1.name = "lisi"
              Persion1.sex = "man"
              Persion1.age = 30
              Persion1.id = 56341153
           
              //给prison2赋值
              Persion2.name = "wangwu"
              Persion2.sex = "woman"
              Persion2.age = 18
              Persion2.id = 78238232
           
              //使用函数传递结构体的地址
              printInfo(&Persion1)
              fmt.Println("------------------")
              printInfo(&Persion2)
          }
           
          //定义结构体指针形参进行传入
          func printInfo(p *Persion) {
              fmt.Println("姓名: ", p.name)
              fmt.Println("年龄: ", p.age)
              fmt.Println("性别: ", p.sex)
              fmt.Println("身份证: ", p.id)
          }
          

          输出结果如下

          姓名:  lisi
          年龄:  30
          性别:  man
          身份证:  56341153
          ——————
          姓名:  wangwu
          年龄:  18
          性别:  woman
          身份证:  78238232

          总结

          结构体是由相同类型和不同类型组成的数据集合,存储的结构类型是不受限制的

          以上就是Go语言学习之指针的用法详解的详细内容,更多关于Go语言指针的资料请关注其它相关文章!

          声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。