【Go语言】结构体类型

64 阅读6分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天,点击查看活动详情

结构体初始化分析

1. 结构:

type 类型名 struct {

字段名 字段类型

字段名 字段类型

}

结构分解:img

解析:Go语言提供了一种自定义数据类型,可以封装多个基本数据类型,这种数据类型叫结构体,英文名称 struct 。并使用type关键字定义struct结构体类型。在Go语言的结构体(struct)和其他语言的类(class)有同等的地位,但Go语言放弃了包括继承在内的大量面向对象特性,只保留了组合(composition)这个最基础的特性。结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体。每个值称为结构体的成员。Go语言中通过 结构体( struct ) 来实现面向对象。

2. 举例:声明一个结构体并赋值信息进行输出。

 //构建结构体
 type Person struct {                                                //结构体声明
    name       string // 姓名
    CreateDate int    // 入职时间
    Address    string // 公司地址
 }
 func main() {                                                       //主函数
    //结构体实例化
    var PersonHU Person
    //结构体实例化赋值
    PersonHU.name = "小虎"
    PersonHU.CreateDate = 2022
    PersonHU.Address = "北京市海淀区上地七街得实大厦"
    fmt.Println(PersonHU)
 }

终端输出:img

结构解析:

 //构建结构体
 type Person struct {                                                //结构体声明
    name       string // 姓名
    CreateDate int    // 入职时间
    Address    string // 公司地址
 }

结构体声明:* 在 Go语言中一般通过结构体(struct)来实现面向对象。,另外结构体通过关键字type来命名标识符再通过明确字段名的的数据类型来完成结构体的成员完整声明过程。需要注意的是当声明匿名结构体后访问前一定要指顶匿名结构体名字,否则编译器就会报错。*

 func main() {                                                       //主函数
    //结构体实例化
    var PersonHU Person
    //结构体实例化赋值
    PersonHU.name = "小虎"
    PersonHU.CreateDate = 2022
    PersonHU.Address = "北京市海淀区上地七街得实大厦"
    fmt.Println(PersonHU)
 }

主函数: func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。函数执行开始后,函数内语句依照main()函数内依次执行。该主函数中先给结构体进行实例化再进行赋值,并通过操作符 ”.” 访问方式来直接赋值再通过Println函数打印输出。

3. 思考扩展:当我们在赋值时能通过操作符”.”来直接访问结构体内元素赋值,那么我们是否能通过操作符”.”来访问输出呢?

通过上例试着输出访问:

 fmt.Println(PersonHU.Address)                                 //操作符访问输出

终端输出: img

操作符访问输出: 前期我们学习到fmt.Println(...) 可以将变量字符串输出到控制台,并在最后自动增加换行字符 \n。函数内语句依照main函数内依次执行。该语句通过操作符”.”访问方式来直接赋值再通过Println函数打印输出。

总结:通过操作符“.”我们能直接访问结构体中的成员字段。

结构体的嵌套分析

1. 结构:

type A struct {

字段 字段类型

字段 字段类型

......

person B// 多重结构体

}

结构分解:img

解析: 在go语言中一个结构体中可以嵌套包含另一个结构体或结构体指针。但是不可以嵌套自己这个类型的变量。

2. 举例:通过结构体嵌套去输出一个公司成员信息。

 package main      //包的声明
 import "fmt"      //引入包
 type Person struct {                   //结构体的声明
    Name string // 姓名
    age  int    // 年龄
    ID   int    // 身份代号
 }
 type Company struct {                       //结构体的嵌套声明               
    name       string // 公司名称
    CreateDate int    // 创立时间
    address    string // 公司地址
    website    string // 公司官网
    person     Person // 多重结构体
 }
 func main() {                                    //主函数   
    // TODO:1、实例化,并直接赋值
    companyZL := Company{
       name:       "知链科技",
       address:    "北京市海淀区上地七街得实大厦",
       website:    "www.educhainx.com",
       CreateDate: 2018,
       person: Person{
          Name: "知链-小胡",
          age:  22,
          ID:   1,
       },
    }
    // TODO:2、访问结构体成员
    fmt.Println(companyZL.name)                    //语句表达式输出
    fmt.Println(companyZL.person.Name)
 }

终端输出:img

结构解析:

 package main                                               //包的声明

包声明:package main 定义了包名。它在源文件中指明了这个文件属于那个包。

 import "fmt"                                                      //引入包

引入包: import ("fmt""time") 告诉 Go 编译器这个程序需要使用 fmt 包和time包,fmt 包实现了格式化 IO(输入/输出)的函数。

 type Person struct {                   //结构体的声明
    Name string // 姓名
    age  int    // 年龄
    ID   int    // 身份代号
 }

结构体声明:* 在 Go语言中一般通过结构体(struct)来实现面向对象。,另外结构体通过关键字type来命名标识符再通过明确字段名的的数据类型来完成结构体的成员完整声明过程。需要注意的是当声明匿名结构体后访问前一定要指顶匿名结构体名字,否则编译器就会报错。*

type Company struct {                       //结构体的嵌套声明               
   name       string // 公司名称
   CreateDate int    // 创立时间
   address    string // 公司地址
   website    string // 公司官网
   person     Person // 多重结构体
} 

结构体嵌套声明:* 在 Go语言中一般通过结构体(struct)来实现面向对象。,另外结构体通过关键字type来命名标识符再通过明确字段名的的数据类型来完成结构体的成员完整声明过程。需要注意的是在该语句中,嵌套的结构体类型应该为所声明的嵌套结构体的结构体名。*

 func main() {                                                        //函数

函数:func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。函数执行开始后,函数内语句依照main()函数内依次执行。

  // TODO:1、实例化,并直接赋值
    companyZL := Company{
       name:       "知链科技",
       address:    "北京市海淀区上地七街得实大厦",
       website:    "www.educhainx.com",
       CreateDate: 2018,
       person: Person{
          Name: "知链-小胡",
          age:  22,
          ID:   1,
       },
    }

结构体实例化赋值:在go语言中结构体的实例化表示将声明的结构体获取内存空间和可用的变量名,声明的结构体其实更像是一个封装的组件。通过短类型推导:将结构体实例化并指定结构体中的字段赋值和嵌套的结构体的字段赋值。

  // TODO:2、访问结构体成员
    fmt.Println(companyZL.name)                    //语句表达式输出
    fmt.Println(companyZL.person.Name)

语句表达式输出: 在go语言中 fmt.Println(...) 可以将变量字符串输出到控制台,并在最后自动增加换行字符 \n。函数内语句依照main函数内依次执行。该语句通过操作符”.”访问方式来直接赋值再通过Println函数打印输出。