使用结构
有时,你需要在一个结构中表示字段的集合。 例如,要编写工资核算程序时,需要使用员工数据结构。 在 Go 中,可使用结构将可能构成记录的不同字段组合在一起。
Go 中的结构也是一种数据结构,它可包含零个或多个任意类型的字段,并将它们表示为单个实体。
要声明结构,需要使用 struct 关键字,还要使用希望新的数据类型具有的字段及其类型的列表。 例如,若要定义员工结构,可使用以下代码:
然后,可像操作其他类型一样使用新类型声明一个变量,如下所示:
var john Employee
用 JSON 编码和解码结构
可使用结构来对 JSON 中的数据进行编码和解码。 Go 对 JSON 格式提供很好的支持,该格式已包含在标准库包中。
你还可执行一些操作,例如重命名结构中字段的名称。 例如,假设你不希望 JSON 输出显示 FirstName
而只显示 name
,或者忽略空字段, 可使用如下例所示的字段标记:
若要将结构编码为 JSON,请使用 json.Marshal
函数。
若要将 JSON 字符串解码为数据结构,请使用 json.Unmarshal
函数。
下例将所有内容组合在一起,将员工数组编码为 JSON,并将输出解码为新的变量:
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
ID int
FirstName string `json:"name"`
LastName string
Address string `json:"address,omitempty"`
}
type Employee struct {
Person
ManagerID int
}
func main() {
employees := []Employee{
Employee{
Person: Person{
LastName: "Doe", FirstName: "John",
},
},
Employee{
Person: Person{
LastName: "Campbell", FirstName: "David",
},
},
}
data, _ := json.Marshal(employees)
fmt.Printf("%s\n", data)
var decoded []Employee
json.Unmarshal(data, &decoded)
fmt.Printf("%v", decoded)
}
运行上述代码时,你会看到以下输出:
[
{"ID":0,"name":"John","LastName":"Doe","ManagerID":0},
{"ID":0,"name":"David","LastName":"Campbell","ManagerID":0}
]
[
{{0 John Doe } 0}
{{0 David Campbell } 0}
]