Go言語は、必要なものを提供し、必要じゃないものは削ぎ落とし、明示的でとても学びやすい言語だと思ってます。好きです。「なるほど、ここからは自分でやれ、ということか、面白い」「おーこんなこともしてくれちゃうのかー」という発見こそあれ、「なんでこここうなってんねん」という体験は今まで無かったです。
が、
今日はじめてGo言語がちょっとだけ嫌いになりました。言語仕様というか、標準パッケージfmt
の仕様。以下のコード、
func main() { a := &A{Name: "otiai10"} fmt.Printf("%+v\n", a) }
みんな大好きfmtパッケージ。
&{Name:otiai10}
こうだと思ってた
結果
ほげら
ふぇぇ
なぜなら
package main import "fmt" type A struct { Name string } func (a *A) String() string { return "ほげら" } func main() { a := &A{Name: "otiai10"} fmt.Printf("%+v\n", a) }
よく見たら
4 If an operand implements method String() string, that method will be invoked to convert the object to a string, which will then be formatted as required by the verb (if any).
ちゃんと書いてあった
(要らねえよJavaかよ)
ハイ、すみませんでした
DRYな備忘録