Go言語 インターフェースを用いたサンプルプログラム

(記述方法)

type インターフェース名 interface {
    関数名(パラメータリスト) 戻り値の型
    関数名(パラメータリスト) 戻り値の型
    〜
}

(サンプルプログラム) singer.go

package main

import "fmt"

// Singerインターフェースの定義
// Singメソッドを実装している変数型をSinger型とみなす
type Singer interface {
    Sing(song string)
}

// Singerインターフェースを実装しようとする変数型
type Person struct {
    name string
}

// Person型にSingメソッドを組み込む。
// ⇒Singer型の変数とみなされる。
func (p Person) Sing(song string) {
    fmt.Printf("%sさんが歌います。\n", p.name)
    fmt.Printf("🎵ららららら〜\n")
    fmt.Printf("🎵%s\n", song)
}

func main() {
    taro := Person{name: "太郎"}
    var singer Singer

    singer = taro // taroはPerson型だが、
    // Person型はSingメソッドを組み込んでいるので
    // Singer型の変数に代入できる。

    singer.Sing("こんにちは、赤ちゃん")
}

(実行結果)

$ go run singer.go
太郎さんが歌います。
🎵ららららら〜
🎵こんにちは、赤ちゃん