😎
golangでinterfaceを満たすメソッドを実装してみる
これは何?
interface
の説明をするために A Tour of Go を見返していたらクイズがあったので答えを考えてみました。
ネタバレとなってしまうので、最初に答えを考えた上で本記事を参照してください。
問題: Stringerを満たすIPAddrを実装せよ
今回取り組んだ問題は こちらExercise: Stringers です。
前のページで、 One of the most ubiquitous interfaces is Stringer defined by the fmt package.
(Stringerは最もよくみられるinterfaceの一つで、fmt パッケージで定義されています。)という紹介があり、本問題へとつながります。
package main
...
type IPAddr [4]byte
// TODO: Add a "String() string" method to IPAddr. // ←これを実装する
...
func main() {
hosts := map[string]IPAddr{
"loopback": {127, 0, 0, 1},
"googleDNS": {8, 8, 8, 8},
}
for name, ip := range hosts {
fmt.Printf("%v: %v\n", name, ip)
// すると、ここでString()関数が呼ばれるため、
// 出力が下記となればOK
//
// loopback: 127.0.0.1
// googleDNS: 8.8.8.8
}
}
答え
答えを見たい方はここ↓をみてください。実行もできます。
解説
fmt.Printでは、引数がStringerインターフェース を満たす型の場合はString()メソッドの結果を出力します。
したがって、Stringメソッド実装有無によって出力結果が変わったわけです。
まとめ
golangを勉強するには、A Tour of Go
を含む公式サイトが充実しているので都度参照するとよいです。
そのうち、ちゃんとinterfaceについての説明を記事にしたいです。
Discussion