如何更改golang标签的默认动作?

时间:2015-11-11 03:13:44

标签: json go tags bson

我不熟悉golang tags的用法,我想更改convertion的默认操作:

type CvJdRelationInfo struct {
    JdId            string
    CvId            string
    Status          int16
    AcceptTimestamp int64
}

json代码会自动转换:

JdId -> JdId
CvId -> CvId
Status -> Status
AcceptTimestamp -> AcceptTimestamp

bson代码会自动转换:

JdId -> jdid
CvId -> cvid
Status -> status
AcceptTimestamp -> accepttimestamp

我可以更改默认操作,例如json bson代码会执行此操作:

JdId -> jdId
CvId -> cvId
Status -> status
AcceptTimestamp -> acceptTimeStamp

所以我每次都可以省略所有标签(如果默认操作正是我想要的,我为什么每次都要写标签?)

type CvJdRelationInfo struct {
    JdId            string `json:"jdId" bson:"jdId"`
    CvId            string `json:"cvId" bson:"cvId"`
    Status          int16  `json:"status" bson:"status"`
    AcceptTimestamp int64  `json:"acceptTimestamp" bson:"acceptTimestamp"`
}

2 个答案:

答案 0 :(得分:0)

您可以尝试:

rows=int(input('Enter number of rows: '))

columns=int(input('Enter number of columns: '))

if rows < 3 and columns < 3:

    print('Invalid input')

else:

    for r in range(rows):

        for c in range(columns):

            print(int(c+r+1) % 2, end=' ')

        print()

答案 1 :(得分:0)

您无法更改encoding/json包的默认行为。它内置于它中,没有可以改变它的导出变量或函数。没什么可讨论的。

  

对象的默认键字符串是结构字段名称,但可以在结构字段的标记值中指定。

这里需要注意的一点是,尽管将值封送到JSON将使用导出的大写字母名称,但是当您解组时,json包是&#34;智能&#34;足以将小写字母与大写字段名称相匹配。

见这个例子:

s := struct{ X, Y int }{}
if err := json.Unmarshal([]byte(`{"X":1,"y":2}`), &s); err != nil {
    panic(err)
}
fmt.Printf("%+v", s)

它将打印( Go Playground ):

{X:1 Y:2}

json包正确地将"X""y"密钥与s.Xs.Y字段匹配,即使"y"是小写的。