为什么Go json.Marshal拒绝这些结构标记?json标记的正确语法是什么?

为什么Go json.Marshal拒绝这些结构标记?json标记的正确语法是什么?,json,go,struct,tags,marshalling,Json,Go,Struct,Tags,Marshalling,我试图使用json.Marshal,但它拒绝接受我的结构标记 我做错了什么 这是“marshal.go”的源代码 我从“go vet marshal.go”收到这些错误消息 我在运行程序时得到这个输出 % ./marshal JSON = {"Name":"Alice","Age":29} 请注意,字段名与Go结构匹配,并忽略json标记 我错过了什么?天哪!我刚想出来。json:和字段名“name”之间不允许有空格 “go vet”错误消息(“错误语法”)毫无帮助 下面的代码可以工作。你

我试图使用json.Marshal,但它拒绝接受我的结构标记

我做错了什么

这是“marshal.go”的源代码

我从“go vet marshal.go”收到这些错误消息

我在运行程序时得到这个输出

% ./marshal
JSON =  {"Name":"Alice","Age":29}
请注意,字段名与Go结构匹配,并忽略json标记


我错过了什么?

天哪!我刚想出来。
json:
和字段名
“name”
之间不允许有空格

“go vet”错误消息(
“错误语法”
)毫无帮助

下面的代码可以工作。你能看出区别吗

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    p := Person{Name: "Alice", Age: 29}
    bytes, _ := json.Marshal(p)
    fmt.Println("JSON = ", string(bytes))
}

尝试删除冒号后面的空格,即`json:`name`有效语法正是中所述的语法。它不能原谅空格等方面的差异。为什么会被否决呢?
go vet
是你的朋友。感谢你的回答,我有类似的地方:
json:“containers,省略empty”`
你为所有人节省了无限的时间,从Go2年开始一直犯这个错误,谢谢兄弟,我为这个简单的问题挣扎了3天:)
% ./marshal
JSON =  {"Name":"Alice","Age":29}
package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    p := Person{Name: "Alice", Age: 29}
    bytes, _ := json.Marshal(p)
    fmt.Println("JSON = ", string(bytes))
}