【Go语言】接口类型

【Golang】接口类型

我已经完成了Golang的基础学习和Web应用程序的学习,在复习的同时也将整理一下。从基础到应用。

package main 
//インターフェース
//指定したメソッドを保持して欲しい時にインターフェースを使う
//異なるstructで共通のメソッドを持たせたい。

/*interface用途

1、異なる構造体で共通のメソッドをまとめられる。

2、どんな型も入るが、関数内で計算などを処理する場合は型アサーションする必要がある。

3、カスタムエラー、Stringerを設定できる。
*/



//interface1の使い方
import (
    "fmt"
)

//interface 型みたいな感じ
//同じメソッドを持つstructをまとめる
type Human interface {
    //共通のメソッドを持つ
    Say() string
}

type Man struct {
    Name string
}

type Woman struct {
    Name string
}

type Dog struct {
    Name string
}


//名前を書き換える場合 アドレスで渡す必要がある
func (m *Man) Say() string {
    m.Name = "Mr." + m.Name
    fmt.Println(m.Name)
    return m.Name
}

//名前を書き換える場合 アドレスで渡す必要がある
func (w *Woman) Say() string {
    w.Name = "Mrs." + w.Name
    fmt.Println(w.Name)
    return w.Name
}

//interfaceがHumanの関数
//Sayを持つ型なので、実行できる
func Speak(h Human){
    h.Say()
}


func main() {
    //structを作成 Human
    //指定したメソッドを保持して欲しい時にインターフェースを使う
    //say()メソッドを持つ
    //変数名 intarface = struct
    //var mike Human = Person{"Mike"}
    //mike.Say()でもできる。ので正直メリットがわからない筆者。
    var mike Human = &Man{"Mike"}
    var nancy Human = &Woman{"Nancy"}
    Speak(mike)
    Speak(nancy)

    //Dogはintarfaceを持たない
    //Say()を持たないとエラーになる
    var dog Dog = Dog{"dog"}
    //Speak(dog)
}
广告
将在 10 秒后关闭
bannerAds