Go语言编程快速入门:struct

P22 go21 - struct
更新于: 2022-01-19 13:25:53

结构类型(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

使用 struct 标签,自定义 json 格式

  • go语言里,要求以Name/CamelCase 方式命令 struct的Key
  • 如果 要做 json 映射,则以 `json: “key”` 方式来映射
小写JSON映射
//正确: 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))

参考