ホームページ  >  記事  >  バックエンド開発  >  Golangのインターフェースとは何ですか

Golangのインターフェースとは何ですか

藏色散人
藏色散人転載
2021-06-18 15:37:141949ブラウズ

以下は 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 サイトの他の関連記事を参照してください。

声明:
この記事はstudygolang.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。