Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Goのインターフェースについて

参考文献

丸々引用している箇所が多いので最初に紹介いたします。
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を学習せねば、、、
最後まで読んでいただきありがとうございます!

keiliving
4月からエンジニアに転職した24歳です。 学習言語:Ruby,Go,Javascript
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away