Go语言编程快速入门:struct
P22 go21 - struct
结构类型(struct)
- 为了将分散的零件组成一个完整的结构体
- 可以将不同类型的东西组合在一起
- 是引用类型,赋值的时候,不会自动 copy
// 这种是一次性的结构体定义(类比: 匿名类)
var loc struct {
lat float64
lng float64
}
loc.lat = 10.0
loc.lng = 20.0
fmt.Printf("%v", loc)
fmt.Printf("%+v", loc)
通过类型复用结构体
// 定义一个类型
type loc struct {
lat float64
lng float64
}
// 类型别名
type distance loc
func main() {
var loc1 loc
loc1.lat = 10.0
loc1.lng = 20.0
fmt.Printf("%v", loc1)
fmt.Printf("%+v", loc1)
}
快速定义一个结构体变量
type loc struct {
lat, lng float64
}
lat1 := loc{lat: 10.01, lng: 21.20}
lat2 := loc{10.01, 21.20}
fmt.Println(lat1, lat2)
将结构体赋值
type loc struct {
lat, lng float64
}
lat1 := loc{lat: 10.01, lng: 21.20}
// lat1/lat2 会自动copy
var lat2 = lat1
lat2.lng = 50.1
fmt.Println(lat1, lat2)
将struct编码为JSON
Javascript 对象表示法。
json 包中的 Marshal 函数可以将 struct 中的数据转化为 json 格式
// 注意这里的 key 要求为大写,否则 json 会得到 {}
// 大写,表示字段是可以导出的
type Loacation struct {
Lat, Lng float64
}
loc := Loacation{10.0, 108.0}
bytes, err := json.Marshal(loc)
if err != nil {
fmt.Println("erro", err)
os.Exit(1)
}
fmt.Println(string(bytes))
使用 struct 标签,自定义 json 格式
- go语言里,要求以Name/CamelCase 方式命令 struct的Key
- 如果 要做 json 映射,则以 `json: “key”` 方式来映射
//正确: Lat float64 `json:"lat"`
//错误(中间不要乱加空格): Lat float64 `json: "lat"`
type Loacation struct {
Lat float64 `json:"lat"`
Lng float64 `json:"lng"`
}
loc := Loacation{10.0, 108.0}
bytes, err := json.Marshal(loc)
if err != nil {
fmt.Println("erro", err)
os.Exit(1)
}
fmt.Println(string(bytes))