type Config struct {
CommitIndex uint64 `json:"commitIndex"`
// TODO decide what we need to store in peer struct
Peers []*Peer `json:"peers"`
}
我理解前两列是什么,但是json:"commitIndex"
是什么?
答案 0 :(得分:28)
它被称为struct标记,可以在运行时使用reflect
包解析它们。
来自https://golang.org/ref/spec#Struct_types:
字段声明后面可以跟一个可选的字符串文字标记,该标记成为相应字段声明中所有字段的属性。
通过反射界面使标签可见,并参与结构的类型标识,否则将被忽略。
答案 1 :(得分:13)
您所指的是标记, Go specification 表示:
字段声明后面可以跟一个可选的字符串文字标记, 它成为相应的所有字段的属性 现场申报。标签通过反射可见 接口并参与结构的类型标识,但不是 忽略。
// 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"
}
这在编译时没有任何作用,但在对结构进行运行时反射时由不同的包使用。正如Amit已经指出的那样,encoding/json
包正在使用它来指定编组/解组行为。 encoding/xml
,gopkg.in/mgo.v2/bson
等也是如此。
标签字符串按惯例是空格分隔的字符串。如 reflect
package :
按照惯例,标记字符串是可选的串联 以空格分隔的键:"值"对。每个键都是非空字符串 由空间以外的非控制字符组成(U + 0020''), 引用(U + 0022'"')和冒号(U + 003A':')。每个值都使用引用 U + 0022'"'字符和Go字符串文字语法。