stringer【Go】
fmtパッケージによるtype定義した型の出力内容を変更できる、interfaceです。
stringerのinterfaceは次のように定義されています。
type Stringer interface { String() string }
よって、String() stringを、変更したい型のメソッドに指定して、
編集した内容をreturnするだけです。
interfaceを特定するのに必要なのは「何をするか」、つまりメソッドだけだからです。
ビフォー・アフターで見てみましょう。
before :
type Person struct { Name string Age int } func main() { mike := Person{"Mike", 21} fmt.Println(mike) // {Mike 21} structそのものが出力される }
after :
type Person struct { Name string Age int } func (p Person) String() string { // 中身を変更しないため、値レシーバーにしている。ポインタでも可 return "My name is " + p.Name } func main() { mike := Person{"Mike", 21} fmt.Println(mike) // My name is Mike stringerにより変更されている }
type定義したものが対象ですので、次のようなこともできます。
type Int int func (i Int) String() string { return fmt.Sprintf("This type is %T, value:%d\n", i, i) // Sprintfによって、異なる型もまとめてstringにできる。%dは基数10の書式指定子 } func main() { num := Int(9) fmt.Println(num) // This type is main.Int, value:9 }