Go 创建结构体

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)
 }

执行结果如下:
Go 创建结构体

解读如下:

  • 关键字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)
 }

执行结果:
Go 创建结构体

还可使用简短变量赋值来创建结构体实例,此时可省略关键字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)
 }

执行结果:
Go 创建结构体

提示:类C语言也支持结构体
在C和C++中,结构体很常见,作为C语言家族的一员,Go也支持结构体。结构体并非创建面向对象代码的方式,而是一种数据结构创建方式,旨在满足数据建模需求。

酷客教程相关文章:

赞(0)

评论 抢沙发

评论前必须登录!