以下は golang のチュートリアル欄で紹介されている Golang のインターフェースです。困っている友人の役に立てれば幸いです。
Golang のインターフェース
まずインターフェースについて話しましょう。私はインターフェースを動作の集合として理解しています。まだ混乱しているようだ。それでは、コードと許容される効果を見てみましょう。
package main import "fmt" type TypeCalculator interface { TypeCal() string } type Worker struct { Type int Name string } type Student struct { Name string } func (w Worker) TypeCal() string { if w.Type == 0 { return w.Name +"是蓝翔毕业的员工" } else { return w.Name+"不是蓝翔毕业的员工" } } func (s Student) TypeCal() string { return s.Name + "还在蓝翔学挖掘机炒菜" } func main() { worker := Worker{Type:0, Name:"小华"} student := Student{Name:"小明"} workers := []TypeCalculator{worker, student} for _, v := range workers { fmt.Println(v.TypeCal()) } } //运行效果 //小华是蓝翔毕业的员工 //小明还在蓝翔学挖掘机炒菜 开始解(xia)释(bai) 首先我们写了一个interface,里面有个待实现的方法TypeCal() type TypeCalculator interface { TypeCal() string } 又写了两个结构体Worker和Student type Worker struct { Type int Name string } type Student struct { Name string }
構造体と同じ名前の関数をそれぞれ実装
func (w Worker) TypeCal() string { if w.Type == 0 { return w.Name +"是蓝翔毕业的员工" } else { return w.Name+"不是蓝翔毕业的员工" } } func (s Student) TypeCal() string { return s.Name + "还在蓝翔学挖掘机炒菜" }
ワーカーと学生のインスタンスをそれぞれ作成
worker := Worker{Type:0, Name:"小华"} student := Student{Name:"小明"}
さて、ここからが本題です。 2 つのインスタンスは TypeCalculator の同じスライスに配置されます
workers := []TypeCalculator{worker, student}
スライスを走査し、スライス内の関数を呼び出して結果を出力します
for _, v := range workers { fmt.Println(v.TypeCal()) }
簡単な分析
結果から、確かに、異なるインスタンスが独自の関数を呼び出しますが、この関数の関数名と戻り値、およびインターフェイスは同じです。では、特定のインスタンスがインターフェイス内の関数を実装していない場合はどうなるでしょうか? Student に対応する関数をコメントアウトしてプログラムを実行すると、プログラムは次のエラーを報告します (私の適当な英語翻訳を使用すると、Student は TypeCalculator を実装しておらず、関数/メソッド TypeCal が見つかりません)
Student does not implement TypeCalculator (missing TypeCal method)
以上がGolangのインターフェースとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。