一瞬わからなくなったのでメモ。 https://play.golang.org/p/AmpjLMDFPf8
そもそも型スイッチは interface{} は値を任意の型になっているか確認して、その型にキャストされた状態にしてくれるすごいやつ。 A Tour of Go に出てくるので知っている人も多いハズ。 Type switches
Go なりの型の持ち方、ようはダックタイピングをイマイチちゃんと使ってなかったのもあって理解ができてなかったが “値がこういうものを持っていたらこの型だよね” という話なだけと、とりあえずのところは理解した
ある値が String() な関数を持っている interface{} ならそれは fmt.Stringer() を満たしているのでキャストができるし 他にも String() だけを要求する interface があれば、それを満たしているともいえるので、その型キャストが出来る。
あと混乱をきたすので深掘りせずにイイ感じに応対したいんだけど、そこにポインタが絡んでくると謎っぽい。
https://play.golang.org/p/MHIX7i1Royk
まあ、特に理由がなければ struct の扱いはポインタでよいんじゃないだろうか。 CodeReviewComments にも怪しかったらポインタレシーバを使うのだって書いてあった。 CodeReviewComments · golang/go Wiki · GitHub
話がそれてきたのでおわり。