Go语言学习之使用结构体|Go主题月

471 阅读4分钟

作者:看那个码农

公众号:看那个码农

上期内容介绍了Go语言学习之运算符|Go主题月

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符
  • 其他运算符

本篇内容将继续带领大家走进Go语言的世界。

1.结构体是什么

Go语言通过用自定义的方式形成新的类型,结构体是类型中带有成员的复合类型。

结构体可以让开发者通过单个变量引用一系列相关的值。

通过使用结构体,可以在单个变量中存储众多类型不同的数据字段

结构体为数据提供了一种灵活的数据结果创建方式。

2.结构体的定义格式

Go语言的关键词type可以将各种基本类型定义为自定义类型,基本类型包括整型字符串布尔等。

结构体定义格式如下:

Type 类型名 struct{
字段1  字段1 类型
字段2  字段2 类型
…
}
  • 类型名:标识自定义结构体的名称,同一个包内不能重复。
  • Struct{}:表示结构体类型,type类型名 struct{}可以理解为将struct{}结构体定义为类型名的类型。
  • 字段1、字段2……:表示结构体字段名。结构体的字段名必须唯一
  • 字段1类型、字段2类型……:表示结构体字段的类型。

1.创建结构体实例方法一

例如下面案例所示:

package main

import "fmt"

type num struct {
   node1 int
   node2 int
}
func main() {
   m:=num{
      node1: 5,
      node2: 10,
   }
   fmt.Printf("node1的值为:%v\nnode2的值为:%v",m.node1,m.node2)

}

输出为:

image.png

2.创建结构体实例方法二

除了上面案例的赋值方法外,还有一种利用结构体赋值的方法:

package main

import "fmt"

type num struct {
   node1 int
   node2 int
}
func main() {
   var m num
   m.node1=1
   m.node2=2
   fmt.Printf("node1的值为:%v\nnode2的值为:%v",m.node1,m.node2)

}

输出为:

image.png

3.创建结构体实例方法三

Go语言中也可以使用关键字new来创建结构体实例,

如下面的案例所示:

package main

import "fmt"

type num struct {
   node1 int
   node2 int
}
func main() {
   m:=new(num)
   m.node1=1
   m.node2=2
   fmt.Printf("node1的值为:%v\nnode2的值为:%v",m.node1,m.node2)

}

输出为:

image.png

3.嵌套结构体

有时候根据业务的需求,需要建立较为复杂的数据结构,在一个结构体中嵌套另一个结构体的方式就很常用。

例如:需要统计公司里每位同事的基本信息(如姓名,年龄,地址),而地址本身也是一个数据结构,地址里面常常会包含城市,街区名,门牌号等信息。

例如下面这个案例:

package main

import "fmt"

type People struct {
   Name    string
   Age     int
   Address Address
}

type Address struct {
   City   string
   Street string
   Number int
}

func main() {
   m:=People{
      Name: "Lisan",
      Age:  22,
      Address: Address{
         City:   "Beijing",
         Street: "Central Street",
         Number: 1006,
      },
   }
   fmt.Printf("%+v\n",m)

}

输出为:

image.png

4.比较结构体

对结构体进行比较,要先看它们的类型是否相同

对于类型相同的结构体,可以使用相等运算符来比较。

  • 要判断两个结构体是否相等,可使用“==
  • 要判断两个结构体是否不等,可使用“!=

具体代码如下面的案例所示:

package main

import "fmt"

type num struct {
   node1     int
   node2     int
}

func main() {

   a:=num{
      node1: 1,
      node2: 2,
   }

   b:=num{
      node1: 1,
      node2: 2,
   }
   if a==b{
      fmt.Println("a == b\n")
   }else{
      fmt.Println("a != b\n")
   }
}

输出为:

image.png

5.匿名结构体

匿名结构体的初始化写法由结构体定义键值对初始化两个部分组成。

无需通过type关键词定义就可以直接使用。

  • 匿名结构体定义时没有结构体类型名,只有字段类型定义
  • 键值对初始化部分由可选的多个键值对组成。

例如下面的格式为创建一个匿名结构体实例的过程:

ins:=struct{
//匿名结构体字段定义
字段1 字段类型1
字段2 字段类型2
…
}{
//字段值初始化
初始化字段1:字段1 的值
初始化字段2:字段2 的值
…
}

在匿名结构体中,键值对初始化部分可选的,不初始化成员,匿名结构体的格式为:

ins:=struct{
//匿名结构体字段定义
字段1 字段类型1
字段2 字段类型2
…
}{}

如果你觉得这篇内容对你有帮助的话:

1、点赞支持下吧,让更多的人也能看到这篇内容

2、关注公众号:看那个码农,我们一起学习一起进步。