Go をちびちびと勉強中にハマったので備忘録
Go は json タグの ダブルクォート "
が超重要
ダブルクォートが抜けていると何故か文字列のパースはできてるのに数値が全部 0 リセットされた状態になる。
もうちょい条件がある気もするけど一旦は割愛
なぜ文字列はパースできているのかが最も謎。
json tag のドキュメントはここ
package main
import (
"bytes"
"log"
"json"
)
/**
* この json tag のダブルクォート、超重要
*/
type User struct {
Id int `json:"id"`
Name string `json:"name"`
Following int `json:"following"`
Followers int `json:"followers"`
Unreads int `json:"unreads"`
CreatedAt int `json:"created_at"`
}
func main() {
var buf *bytes.Buffer //ここに json データが入るとしよう
/**
* 簡単のため、色々と省略
*/
var user User
err := json.Unmarshal(buf, &user)
if err != nil {
log.Fatal(err)
}
println(user)
}
ここをダブルクォート "
抜きで書いちゃうと
type User struct {
Id int `json:id`
Name string `json:name`
Following int `json:following`
Followers int `json:followers`
Unreads int `json:unreads`
CreatedAt int `json:created_at`
}
こんな事になる
# With double quote
$ go run main.go
{ 1234 username 23 17 0 1490027932013 }
# Without double quote
$ go run main.go
{ 0 username 0 0 0 0 }