すごい局所的だけど stringerで型を作って、それを構造体に入れたい場合の話。
//go:generate stringer -type=City
type City int
const (
Tokyo City = iota
Osak
NewYork
)
type Address struct {
City City `json:"city"`
}
func main() {
a := Address{NewYork}
bs, _ := json.Marshal(a)
fmt.Println(string(bs)) // {"city":2}
}
最後の結果を{"city":"NewYork"}
にしたいとき
//go:generate stringer -type=City
type City int
const (
Tokyo City = iota
Osaka
NewYork
)
// Marshal時にstringで使った文字列を返す
func (c City) MarshalJSON() ([]byte, error) {
return []byte(`"` + c.String() + `"`), nil
}
type Address struct {
City City `json:"city"`
}
func main() {
a := Address{NewYork}
bs, _ := json.Marshal(a)
fmt.Println(string(bs)) // {"city":"NewYork"}
}
func (c City) MarshalJSON() ([]byte, error) {
return []byte(`"` + c.String() + `"`), nil
}
前後に"
が必要。