Go語言程式:建立名為Animal的介面,定義Speak方法


在 Go 語言中,speak 方法可以透過您定義的自定義函式來獲取,以實現特定的功能。Speak 是一個使用者定義的函式,用於執行其建立的目的。在本文中,我們將建立一個名為 Animal 的介面,該介面定義了 Speak 方法。此介面作為任何想要被視為動物的型別的藍圖,並提供了一個實現 Speak 行為的契約。這裡我們將使用三種不同的方法:直接介面實現、結構體嵌入以及介面斷言,並結合示例來闡述這個概念。在本文中,我們建立了一個名為 Animal 的介面,該介面定義了一個名為 Speak 的方法。

語法

type Animal interface {Speak() string}

語法型別 Animal 介面 { Speak() string } 在 Go 中定義了一個名為 Animal 的介面,指定任何實現此介面的型別都必須具有一個名為 Speak 的方法,該方法不帶引數並返回一個字串。

OuterStruct struct

在此語法中,OuterStruct 透過將其包含為 OuterStruct 中的一個欄位來嵌入 EmbeddedStruct。

EmbeddedStruct

嵌入結構體的欄位和方法可以在 OuterStruct 中自動訪問。可以定義特定於 OuterStruct 的方法,並且可以使用 o.EmbeddedStruct.Method() 訪問 EmbeddedStruct 的方法。

value, ok := variable.(InterfaceType)

語法值,ok := variable.(InterfaceType) 用於 Go 中的介面斷言。它嘗試斷言儲存在 variable 中的值是否實現了 InterfaceType,如果成功,則將斷言的值賦給 value 並將 ok 設定為 true;否則,ok 設定為 false。

演算法

  • 步驟 1 − 定義一個名為 Animal 的介面,其中包含 Speak 方法簽名。

  • 步驟 2 − 透過建立滿足 Animal 介面的具體型別,為特定動物型別實現 Speak 方法。

  • 步驟 3 − 在每個動物型別的 Speak 方法實現中,定義動物發出的特定行為或聲音。

  • 步驟 4 − 建立不同動物型別的例項,並將它們分配給 Animal 型別的變數。

  • 步驟 5 − 呼叫每個動物變數上的 Speak 方法以觸發為該動物定義的特定聲音或行為。

示例 1

在下面的示例程式碼中,我們首先宣告一個名為 Animal 的介面,它具有返回字串的 Speak 方法。然後,我們定義了兩種結構體型別 - Dog 和 Cat,它們透過為 Speak 方法提供實現來實現 Animal 介面。然後我們呼叫每個 Animal 介面變數上的 Speak 方法,並呼叫 Dog 和 Cat 的相應實現,產生預期的輸出“Woof!”和“Meow!”。

package main

import "fmt"

type Animal interface {
   Speak() string
}

type Dog struct{}

func (d Dog) Speak() string {
   return "Woof!"
}

type Cat struct{}

func (c Cat) Speak() string {
   return "Meow!"
}

func main() {
   dog := Dog{}
   cat := Cat{}

   var animal1 Animal = dog
   var animal2 Animal = cat

   fmt.Println(animal1.Speak()) 
   fmt.Println(animal2.Speak()) 
}

輸出

Woof!
Meow!

示例 2

以下程式碼演示了 Go 中的結構體嵌入和介面實現。它定義了一個名為 Animal 的介面,該介面具有 Speak() 方法。OuterStruct 結構體嵌入 EmbeddedStruct,繼承其欄位和方法。透過呼叫 OuterStruct 例項上的 Speak() 方法,程式碼列印“This is the embedded struct speaking!”作為輸出。

package main

import "fmt"

type Animal interface {
   Speak() string
}

type EmbeddedStruct struct{}

func (e EmbeddedStruct) Speak() string {
   return "This is the embedded struct speaking!"
}

type OuterStruct struct {
   EmbeddedStruct
}

func main() {
   outer := OuterStruct{}

   fmt.Println(outer.Speak()) // Output: This is the embedded struct speaking!
}

輸出

This is the embedded struct speaking!

示例 3

以下程式碼演示了 Go 中介面和型別斷言的使用。它定義了一個名為 Animal 的介面,該介面具有 Speak() 方法。兩種型別,Dog 和 Cat,都實現了各自的 Speak() 方法。在 main() 函式中,建立 Dog 和 Cat 的例項並斷言為 Animal 介面。然後,程式碼檢查斷言是否成功,並呼叫斷言值上的 Speak() 方法,分別導致輸出“Woof!”和“Meow!”。

package main

import "fmt"

type Animal interface {
   Speak() string
}

type Dog struct{}

func (d Dog) Speak() string {
   return "Woof!"
}

type Cat struct{}

func (c Cat) Speak() string {
   return "Meow!"
}

func main() {
   dog := Dog{}
   cat := Cat{}

   var animal1 Animal = dog
   var animal2 Animal = cat

   if value, ok := animal1.(Dog); ok {
      fmt.Println(value.Speak())
   }

   if value, ok := animal2.(Cat); ok {
      fmt.Println(value.Speak())
   }
}

輸出

Woof!
Meow!

結論

在本文中,我們瞭解瞭如何在 Go 中建立一個名為“Creature”的介面,並使用“Talk”方法。透過定義介面並使用不同的結構體型別來實現它,我們實現了多型行為,允許交換不同型別的物件。Creature 介面提供了一個契約,確保任何實現它的型別都將具有“Talk”方法。這種靈活性使我們能夠編寫更模組化和可擴充套件的程式碼。

更新於:2023年7月20日

194 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.