参考文献
丸々引用している箇所が多いので最初に紹介いたします。
Goのinterfaceがわからない人へ
投稿までの背景
インターフェースがよう分からんかった~(Tour of Goで関数をMとかIとか1文字で定義されてもややこしい)~
Tour of Goに出てくるStringerの使い方が謎すぎた
間違っているところが確実にあるので、コメント等いただけたら幸いです。
インターフェスの使い方
- インターフェースの定義
- インターフェースを使った関数
- インターフェースの実装
- インターフェースの使い方
1.インターフェースの定義
A:参考にしたコード(Tour of Goより食べる動作を例にしているので非常にわかやすいです)
B:Tour of Go
type Eater interface{
PutIn()
Chew()
Swallow()
}
type Human struct{
Height int
}
B
type Stringer interface {
String() string
}
type Person struct {
Name string
Age int
}
違いといえば
type hoge interface{
fuga()
}
のところでfuga()の後に型を定義しているか
2.インターフェースを使った関数
A
func EatAll(e Eater){
e.PutIn()
e.Chew()
e.Swallow()
}
B
なし(fmtパッケージだから必要ない?すみませんここよくわかってないです)
3.インターフェースの実装
A
func (h Human) PutIn(){
fmt.Println("道具を使って丁寧に口に運ぶ")
}
func (h Human) Chew(){
fmt.Println("歯でしっかり噛む")
}
func (h Human) Swallow(){
fmt.Println("よく噛んだら飲み込む")
}
B
func (p Person) String() string {
return fmt.Sprintf("%v (%v years)", p.Name, p.Age)
}
BはSprintfを使用しているのでreturnで値を返しています
4.インターフェースの使い方
A
func main() {
var man Human = Human{Height: 300}
var eat Eater
eat = man
EatAll(eat)
}
B
func main() {
a := Person{"Arthur Dent", 42}
fmt.Println(a)
}
まとめ
インターフェースについては理解することができましたが、今度はStringerを学習せねば、、、
最後まで読んでいただきありがとうございます!