亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

對 Go 中的某些數據結構語法感到困惑

對 Go 中的某些數據結構語法感到困惑

Go
守候你守候我 2022-08-15 16:59:10
在過去的幾周里,我一直在學習圍棋。來自Python和Erlang,我喜歡這門語言,它的簡單性和嚴格性。然而,在結構和解析YAML方面有一些語法“東西”,我對此感到困惑。這是我的 yml 配置。例如:server:  host: 127.0.0.1  port: 8080  path: /some/silly/path我看到人們聲明的結構如下:    Server struct {        Host string `yaml:"host"`        Path string `yaml:"path"`        Port string `yaml:"port"`            } `yaml:"server"`}我也看到這個:    Server struct {        Host string `yaml:"host"`        Path string `yaml:"path"`        Port string `yaml:"port"`    }}在服務器結構聲明的末尾添加 yaml:“server” 有什么意義?
查看完整描述

1 回答

?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

下面是一個 JSON 示例,因為它是內置的:


package main


import (

   "encoding/json"

   "fmt"

)


func main() {

   s := `

   {

      "server": {"host": "127.0.0.1", "path": "/some/silly/path", "port": 8080}

   }

   `

   var config struct {

      Server struct {

         Host, Path string

         Port int

      }

   }

   json.Unmarshal([]byte(s), &config)

   fmt.Printf("%+v\n", config)

}

所以正如你所注意到的,我根本沒有使用任何標簽。規則在這里:


要將 JSON 取消到結構中,Unmarshal 將傳入的對象鍵與 Marshal 使用的鍵(結構字段名稱或其標記)匹配,首選完全匹配,但也接受不區分大小寫的匹配。


https://golang.org/pkg/encoding/json/#Unmarshal


因此,只要 JSON 鍵與結構字段匹配(無論大小寫如何),您就不需要標簽。否則,您就會這樣做。通常,您可以避免使用標記,除非您只想在結構中使用其他標記,或者如果 JSON 鍵具有連字符,例如:


{"need-tag-for-this": 10}


查看完整回答
反對 回復 2022-08-15
  • 1 回答
  • 0 關注
  • 104 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號