Go的struct

结构体
定义声明结构体
type 类型名 struct {
    字段1 字段1类型
    字段2 字段2类型
}
对各个部分的说明:
  • 类型名:标识自定义结构体的名称,在同一个包内不能重复。
  • struct{}:表示结构体类型,type 类型名 struct{}可以理解为将 struct{} 结构体定义为类型名的类型。
  • 字段1、字段2……:表示结构体字段名,结构体中的字段名必须唯一。
  • 字段1类型、字段2类型……:表示结构体各个字段的类型。
1 结构体的定义只是一种内存布局的描述,只有当结构体实例化时,才会真正地分配内存
因此必须在定义结构体并实例化后才能使用结构体的字段。
2 实例化就是根据结构体定义的格式创建一份与格式一致的内存区域,结构体实例与实例间的内存是完全独立的。
结构体实例化:
1 基本类型
结构体本身是一种类型,可以像整型、字符串等类型一样,以 var 的方式声明结构体即可完成实例化
var ins T T为结构体类型,ins为结构体实例
2 指针类型
Go语言中,还可以使用 new 关键字对类型(包括结构体、整型、浮点数、字符串等)进行实例化,结构体在实例化后会形成指针类型的结构体。
ins:= new(T)
其中: T 为类型,可以是结构体、整型、字符串等。 ins:T 类型被实例化后保存到 ins 变量中,ins 的类型为 *T,属于指针。
2.1 另外一种实例化
对结构体进行&取地址操作时,视为对该类型进行一次 new 的实例化操作
ins := &T{}
其中: T 表示结构体类型。 ins 为结构体的实例,类型为 *T,是指针类型。
结构式初始化
初始化有两种形式分别是以字段“键值对”形式和多个值的列表形式,
键值对形式的初始化适合选择性填充字段较多的结构体, ins := 结构体类型名{     字段1: 字段1的值,     字段2: 字段2的值,     … } 多个值的列表形式适合填充字段较少的结构体。 ins := 结构体类型名{     字段1的值,     字段2的值,     … }
结构体成员也可以称为“字段”,这些字段有以下特性:
  • 字段拥有自己的类型和值;
  • 字段名必须唯一;
  • 字段的类型也可以是结构体,甚至是字段所在结构体的类型。
Struct 定义和初始化实例
和函数声明类似,struct 名在同一个包内不能重复,将 struct 名的首字母大写表示该 struct 可以在包外被访问。struct 中的字段如果希望包外公开,同样需要将字段名的首字母大写。一个简单的结构体定义如下:
type Student struct {
StudentID int64
Name string
birth string //小写不公开
a,b,c int //同样的类型可以写在一行
}
实例化:
s0 := Student{}
s1:= Student{
StudentID:1,
Name:"s1",
birth:"1990101"
}
s2 := &Student { //获取指针
StudentID:3,
Name:"s3",
birth:"19900102" // tips1
}
tips1:
小写字母外面不能通过s2.birth获取,否则报如下错误
./struct.go:29:51: s3.brith undefined (type *Student has no field or method brith)
内嵌结构体
type People struct{
Height int
Age int
}
type Student struct {
People
StudentID int64
Name string
birth string //小写不公开
a,b,c int //同样的类型可以写在一行
}

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注