golang结构定义中反引号的用法是什么?

har*_*ryz 105 go

type NetworkInterface struct {
    Gateway              string `json:"gateway"`
    IPAddress            string `json:"ip"`
    IPPrefixLen          int    `json:"ip_prefix_len"`
    MacAddress           string `json:"mac"`
    ...
}
Run Code Online (Sandbox Code Playgroud)

我很困惑什么是反引号内容的功能,比如json:"gateway".

这只是评论//this is the gateway吗?

Iam*_*NaN 77

它们是标签:

字段声明后面可以跟一个可选的字符串文字标记,该标记成为相应字段声明中所有字段的属性.标签通过反射界面可见,并参与结构的类型标识,否则将被忽略.

// A struct corresponding to the TimeStamp protocol buffer.
// The tag strings define the protocol buffer field numbers.
struct {
  microsec  uint64 "field 1"
  serverIP6 uint64 "field 2"
  process   string "field 3"
}
Run Code Online (Sandbox Code Playgroud)

请参阅此问题和答案以获得更详细的解释和答案.

反引号用来创建它可以包含任何类型的字符的原始字符串字面量:

原始字符串文字是后引号``之间的字符序列.在引号内,任何字符都是合法的,除了反引号.

  • 谢谢你的反引言解释. (5认同)

Joh*_*röm 59

您可以以标记的形式向Go结构添加额外的元信息.以下是一些用例示例.

在这种情况下,json:"gateway"使用由JSON包到的值编码Gateway到所述键gateway中相应的JSON对象.

例:

n := NetworkInterface{
   Gateway : "foo"
}
json.Marshal(n)
// will output `{"gateway":"foo",...}`
Run Code Online (Sandbox Code Playgroud)