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

时间:2015-06-06 09:15:58

标签: go

type NetworkInterface struct {
    Gateway              string `json:"gateway"`
    IPAddress            string `json:"ip"`
    IPPrefixLen          int    `json:"ip_prefix_len"`
    MacAddress           string `json:"mac"`
    ...
}

我很难混淆内容在反引号中的功能,例如json:"gateway"

只是评论,例如//this is the gateway

2 个答案:

答案 0 :(得分:66)

他们是tags

  

字段声明后面可以跟一个可选的字符串文字标记,   它成为相应的所有字段的属性   现场申报。标签通过反射可见   接口并参与结构的类型标识,但不是   忽略。

// 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"
}

有关更详细的说明和答案,请参阅this question and answer

back quotes用于创建可包含任何类型字符的原始字符串文字:

  

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

答案 1 :(得分:53)

您可以以标记的形式向Go结构添加额外的元信息。 Here are some examples of use cases

在这种情况下,json package使用json:"gateway"Gateway的值编码到相应json对象中的键gateway中。

示例:

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