go语言结构体struct,三种定义方法

go语言的结构体struct,可以用来声明一个新的类型,用来封装其他类型的属性或字段。就像python语言中的类class一样,而且也有类似的继承关系。

结构体struct语法基本结构

type TypeName struct{
	attribute DataType
}

基本结构解析

  • 如上代码,结构体必须以关键词type开头作为声明;
  • TypeName是我们所要定义的类型名称;
  • struct关键字紧随TypeName之后;
  • 花括号"{}"里面用来定义类型的属性或字段,可以写无限多个。

结构体struct的简单实例

type programmer struct {
	name      string
	age       int
	ability   string
	hair      string
	companion string
}

代码解析

如上代码,我们设计了一个程序员类型的结构体,里面有name、age、ability、hair和companion等字段,及各自的数据类型。

结构体的声明

我们声明一个自定义的数据类型(结构体)变量与go语言当中的其他的数据类型的变量的方式是一样的,只是值的初始化可能有些不同,如下实例代码(我们接着上面的结构体programmer):

func main() {
	var p programmer //我们声明了一个programmer类型的变量p,并且没有初始化
	fmt.Printf("p的数据类型为%T,值为%v \n", p, p)

	//为变量p赋值
	p.name = "小明"  //我们用“.”符号来访问结构体的属性或字段
	p.age = 30
	p.ability = "软件开发"
	p.hair = "不多"
	p.companion = "单身"
	fmt.Printf("p的数据类型为%T,值为%v \n", p, p)

	//也可以用键值对的方式进行赋值
	p1 := programmer{name: "小花", age: 28, ability: "软件开发", hair: "茂盛", companion: "单身"}
	fmt.Printf("p1的数据类型为%T,值为%v \n", p1, p1)

	//还可以按结构体中属性或字段的顺序来赋值
	p2 := programmer{"小强", 31, "架构师", "秃顶", "单身"}
	fmt.Printf("p2的数据类型为%T,值为%v \n", p2, p2)

}

代码输出:
p的数据类型为main.programmer,值为{ 0   } 
p的数据类型为main.programmer,值为{小明 30 软件开发 不多 单身} 
p1的数据类型为main.programmer,值为{小花 28 软件开发 茂盛 单身}
p2的数据类型为main.programmer,值为{小强 31 架构师 秃顶 单身}  

结构体struct的匿名字段

结构体struct中的字段没有字段名,只有类型,或其他的结构体的名称,那么这个字段就成为匿名字段,而且如果匿名字段是结构体的话,那么就相当于继承了该字段的所有字段,我们可以通过如下的实例来进一步了解:

package main

import "fmt"

type interest []string

type worker struct {
	job string
}

type programmer struct {
	name      string
	age       int
	ability   string
	hair      string
	companion string
	interest
	worker
}

func main() {
	var p programmer //我们声明了一个programmer类型的变量p,并且没有初始化

	//为变量p赋值
	p.name = "小明"
	p.age = 30
	p.ability = "软件开发"
	p.hair = "不多"
	p.companion = "单身"
	p.interest = []string{"穿格子衫", "宅在宿舍或家里"} //注意p.interest的赋值方式,以及下面p.worker的赋值方式
	p.worker = worker{job: "打工人"}
	fmt.Printf("p的数据类型为%T,值为%v \n", p, p)
	fmt.Printf("我们可以直接用p.job来访问,比如p.job的值为%v \n", p.job)

}

代码输出:
p的数据类型为main.programmer,值为{小明 30 软件开发 不多 单身 [穿格子衫 宅在宿舍或家里] {打工人}} 
我们可以直接用p.job来访问,比如p.job的值为打工人 

结构体的方法,我们将在下一章节中进行介绍。


全栈后端 / go语法 :













Copyright © 2022-2024 笨鸟工具 x1y1z1.com All Rights Reserved.