Go 创建结构体,声明结构体后,就可通过多种方式创建它。假设您已经声明了一个结构体,那么就可直接声明这种类型的变量。
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 = "www.coolcou.com"
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 = "www.coolcou.com"
m.Rating = 0.9918
fmt.Printf("%+v\n", m)
}
执行结果如下:
解读如下:
- 关键字var声明变量m。
- 没有给字段赋值,因此它们默认为零值。对于字符串,零值为空字符串” “;对于float32,零值为0。
- 将字段的值打印到终端。
- 使用点表示法给结构体的数据字段赋值。
- 再次将结构体打印到终端,以证明其数据字段的值发生了变化。
也可使用关键字new来创建结构体实例,如下程序所示。关键字new创建结构体Movie的一个实例(为其分配内存);将这个结构体实例赋给变量m后,就可像前面那样使用点表示法给数据字段赋值了。
:= new(Movie)
m.Name = "www.coolcou.com"
m.Rating = 0.99
程序使用关键字new创建结构体实例
package main
import (
"fmt"
)
type Movie struct {
Name string
Rating float32
}
func main() {
m := new(Movie)
m.Name = "www.coolcou.com"
m.Rating = 0.99
fmt.Printf("%+v\n", m)
}
执行结果:
还可使用简短变量赋值来创建结构体实例,此时可省略关键字new。创建结构体实例时,可同时给字段赋值,方法是使用字段名、冒号和字段值。
c := Movie{Name: "Citizen Kane", Rating: 10}
也可省略字段名,按字段声明顺序给它们赋值,但出于可维护性考虑,不推荐这样做。
c := Movie{"Citizen Kane", 10}
字段很多时,让每个字段独占一行能够提高代码的可维护性和可读性。请注意,如果您选择这样做,则最后一个数据字段所在的行也必须以逗号结尾。
c := Movie {
Name: "Citizen Kane",
Rating: 10,
}
使用简短变量赋值是最常用的结构体创建方式,也是推荐的方式。
package main
import (
"fmt"
)
type Movie struct {
Name string
Rating float32
}
func main() {
m := Movie{
Name: "www.coolcou.com",
Rating: 0.99,
}
fmt.Printf("%+v\n", m)
}
执行结果:
提示:类C语言也支持结构体。
在C和C++中,结构体很常见,作为C语言家族的一员,Go也支持结构体。结构体并非创建面向对象代码的方式,而是一种数据结构创建方式,旨在满足数据建模需求。
酷客教程相关文章:
评论前必须登录!
注册