|
|
|
|
@ -33,9 +33,9 @@ type Employee struct {
|
|
|
|
|
|
|
|
|
|
*(尽管以上语句节省了代码行数,但是这会导致字段定义不够清晰,请尽量避免使用以上语句的定义方式)*
|
|
|
|
|
|
|
|
|
|
上面的结构体 `Employee` 是一个**具名结构体 `(named structure)`** ,因为它创建了一个具有名字的结构体类型:`Employee`。我们可以定义具名结构体类型的变量。
|
|
|
|
|
上面的结构体 `Employee` 是一个**具名结构体 `(named structs)`** ,因为它创建了一个具有名字的结构体类型:`Employee`。我们可以定义具名结构体类型的变量。
|
|
|
|
|
|
|
|
|
|
我们也可以定义一个没有类型名称的结构体,这种结构体叫做**匿名结构体 `(anonymous structures)`**。
|
|
|
|
|
我们也可以定义一个没有类型名称的结构体,这种结构体叫做**匿名结构体 `(anonymous structs)`**。
|
|
|
|
|
|
|
|
|
|
```golang
|
|
|
|
|
var employee struct {
|
|
|
|
|
@ -80,9 +80,9 @@ func main() {
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
在上面的程序中,我们定义了一个名为 `Employee` 的结构体类型。我们可以通过指定字段的名称和对应的值来创建一个结构体变量,比如在第15行,我们就是通过这种方式定义了 `Employee` 类型的一个结构体变量 `empl`。这里字段名称的顺序没必要和声明结构体类型时的一致。例如这里我们将 `lastName` 放在了最后,程序同样正确运行。
|
|
|
|
|
在上面的程序中,我们定义了一个名为 `Employee` 的结构体类型。我们可以通过指定字段的名称和对应的值来创建一个结构体变量,比如在第 15 行,我们就是通过这种方式定义了 `Employee` 类型的一个结构体变量 `emp1`。这里字段名称的顺序没必要和声明结构体类型时的一致。例如这里我们将 `lastName` 放在了最后,程序同样正确运行。
|
|
|
|
|
|
|
|
|
|
在定义结构体变量时也可以忽略字段名称,例如在第 23 行,我们定义 emp2 时没有指定字段名称。但是通过这种方式定义的结构体变量时,字段值的顺序必须与声明结构体类型时字段的顺序保持一致。
|
|
|
|
|
在定义结构体变量时也可以忽略字段名称,例如在第 23 行,我们定义 `emp2` 时没有指定字段名称。但是通过这种方式定义的结构体变量时,字段值的顺序必须与声明结构体类型时字段的顺序保持一致。
|
|
|
|
|
|
|
|
|
|
上面的程序输出如下:
|
|
|
|
|
|
|
|
|
|
@ -115,7 +115,7 @@ func main() {
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
在上面的程序中,第3行定义了一个 匿名结构体变量 emp3。正如我们提到的一样,这种结构体成为匿名结构体,因为它只创建了一个新的结构体变量 emp3,而没有定义新的结构体类型。
|
|
|
|
|
在上面的程序中,第 8 行定义了一个**匿名结构体变量** `emp3`。正如我们之前提到的,这种结构体叫做匿名结构体,因为它只创建了一个新的结构体变量 emp3,而没有定义新的结构体类型。
|
|
|
|
|
|
|
|
|
|
程序的输出为:
|
|
|
|
|
|
|
|
|
|
@ -123,9 +123,9 @@ func main() {
|
|
|
|
|
Employee 3 {Andreah Nikola 31 5000}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 结构体变量的 0 值
|
|
|
|
|
## 结构体变量的零值
|
|
|
|
|
|
|
|
|
|
当定义一个结构体变量,但是没有给它提供初始值,则对应的字段被赋予它们各自类型的0值。
|
|
|
|
|
当定义一个结构体变量,但是没有给它提供初始值,则对应的字段被赋予它们各自类型的零值。
|
|
|
|
|
|
|
|
|
|
```golang
|
|
|
|
|
package main
|
|
|
|
|
|