1.结构体是什么
结构体是一系列具有指定数据类型的数据字段,能够通过单个变量引用一系列相关的值。通过使用结构体,可在单个变量中存储众多类型不同的数据字段。
下列程序声明并创建一个简单的结构体
package main
import (
"fmt"
)
type Movie struct {
Name string
Rating float32
}
func main() {
m := Movie{
Name: "Citizen Kane",
Rating: 10,
}
fmt.Println(m.Name, m.Rating)
}
程序解读如下:
- 关键字type指定一种新类型
- 将新类型的名称指定为Movie
- 类型名右边是数据类型,这里为结构体
- 在大括号内,使用名称和类型指定了一系列数据字段
- 在main函数中,使用简短变量赋值声明并初始化了变量m,给数据字段指定的值为相应的数据类型
- 使用点表示法访问数据字段并将其打印到控制台
程序运行结果如下所示:
Citizen Kane 10
2.创建结构体
声明结构体后,就可通过多种方式创建它。假设你已经声名了一个结构体,那么就可直接声明这种类型的变量。
type Movie struct {
Name string
Rating float32
}
var m Movie
这将创建一个结构体实例,并将各个数据字段设置为相应数据类型的零值。如果要调试或查看结构体的值,可使用fmt包将结构体的字段名和值打印出来。可使用占位符%+v并将其传入结构体。
fmt.Printf("%+v\n",m)
这将把字段名和值打印到终端。创建结构体时,如果没有初始化,则Go将把每个数据字段设置为相应数据类型的零值。
{Name:Rating:0}
以这种方式创建结构体实例后,可使用点表示法给其字段赋值。
var m Movie
m.Name = "Metropolis"
m.Rating = 0.99
结构体数据字段的值是可变的,也就是说可以动态地修改它们。但是结构体被声明或者实例被创建,就不能再修改其字段的数据类型了,否则将引发编译错误。
下面程序示例创建了一个结构体并将其赋给一个变量,然后再给这个结构体的数据字段赋值。
package main
import (
"fmt"
)
type Movie struct {
Name string
Rating float32
}
func main() {
var m Movie
fmt.Printf("%+v\n", m)
m.Name = "Metropolis"
m.Rating = 0.9918
fmt.Printf("%+v\n", m)
}
程序解读如下:
- 关键字var声明变量m
- 没有给字段赋值,因此它们默认为零值。对于字符串,零值为空字符串“ ”;对于float32,零值为0。
- 将字段的值打印到终端
- 使用点表示法给结构体的数据字段赋值
- 再次将结构体打印到终端,以证明其数据字段的值发生了变化
程序运行结果如下:
{Name: Ratin