一.基本介绍
Go语言可以通过自定义的方式形成新的类型,结构体就是这些类型中的一种复合类型,结构体是由零个或多个任意类型的值聚合成的实体,每个值都可以称为结构体的成员。(相当于 C# 的实体类)
结构体成员也可以称为“字段”,这些字段有以下特性:
1.字段拥有自己的类型和值;
2.字段名必须唯一;
3.字段的类型也可以是结构体,甚至是字段所在结构体的类型。
结构体的定义格式如下:
type 类型名 struct { 字段1 字段1类型 字段2 字段2类型 … }
类型名:标识自定义结构体的名称,在同一个包内不能重复。
struct{}:表示结构体类型,type 类型名 struct{}可以理解为将 struct{} 结构体定义为类型名的类型。
字段1、字段2……:表示结构体字段名,结构体中的字段名必须唯一。
字段1类型、字段2类型……:表示结构体各个字段的类型。
二.实例化形式
结构体本身是一种类型,可以像整型、字符串等类型一样,以 var 的方式声明结构体即可完成实例化。
var ins T T 为结构体类型,ins 为结构体的实例。
如:
type Point struct { X int Y int } var p Point p.X = 10 p.Y = 20
三.创建指针类型的结构体
可以使用 new 关键字对类型(包括结构体、整型、浮点数、字符串等)进行实例化,结构体在实例化后会形成指针类型的结构体
ins := new(T) T 为类型,可以是结构体、整型、字符串等。 ins:T 类型被实例化后保存到 ins 变量中,ins 的类型为 *T,属于指针。
如:
type Player struct{ Name string HealthPoint int MagicPoint int } tank := new(Player) tank.Name = "Canon" tank.HealthPoint = 300
四.取结构体的地址实例化
对结构体进行&取地址操作时,视为对该类型进行一次 new 的实例化操作
ins := &T{} T 表示结构体类型 ins 为结构体的实例,类型为 *T,是指针类型。
如:
type Command struct { Name string // 指令名称 Var *int // 指令绑定的变量 Comment string // 指令的注释 } var version int = 1 cmd := &Command{} cmd.Name = "version" cmd.Var = &version cmd.Comment = "show version"
取地址实例化是最广泛的一种结构体实例化方式,可以使用函数封装上面的初始化过程,代码如下
func newCommand(name string, varref *int, comment string) *Command { return &Command{ Name: name, Var: varref, Comment: comment, } } cmd = newCommand( "version", &version, "show version", )
四.初始化结构体的成员变量
1.键值对初始化结构体的书写格式
ins := 结构体类型名{ 字段1: 字段1的值, 字段2: 字段2的值, … }
2.多个值的列表初始化结构体
ins := 结构体类型名{ 字段1的值, 字段2的值, … } type Address struct { Province string City string ZipCode int PhoneNumber string } addr := Address{ "四川", "成都", 610000, "0", }
使用这种格式初始化时,需要注意:
a.必须初始化结构体的所有字段。
b.每一个初始值的填充顺序必须与字段在结构体中的声明顺序一致。
c.键值对与值列表的初始化形式不能混用。