猿问

对 Go 中的某些数据结构语法感到困惑

在过去的几周里,我一直在学习围棋。来自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” 有什么意义?


守候你守候我
浏览 110回答 1
1回答

慕标5832272

下面是一个 JSON 示例,因为它是内置的:package mainimport (   "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}
随时随地看视频慕课网APP

相关分类

Go
我要回答