Json.Marshalを使用しようとしていますが、structタグを受け入れることができません。
私は何が間違っているのですか?
これが「marshal.go」のソースコードです
https://play.golang.org/p/eFe03_89Ly9
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))
}
「govetmarshal.go」からこれらのエラーメッセージが表示されます
./marshal.go:9: struct field tag `json: "name"` not compatible with reflect.StructTag.Get: bad syntax for struct tag value
./marshal.go:10: struct field tag `json: "age"` not compatible with reflect.StructTag.Get: bad syntax for struct tag value
プログラムを実行すると、この出力が得られます。
% ./marshal
JSON = {"Name":"Alice","Age":29}
フィールド名がGo構造と一致し、jsonタグを無視していることに注意してください。
何が足りないのですか?
おやまあー!私はそれを理解しました。 json:
とフィールド名"name"
の間にスペースを入れることはできません。
「govet」エラーメッセージ("bad syntax"
)は非常に役に立ちません。
次のコードは機能します。違いがわかりますか?
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))
}