首頁 >後端開發 >Golang >如何從對介面的引用中取得對具體類型的引用

如何從對介面的引用中取得對具體類型的引用

王林
王林轉載
2024-02-09 16:39:14958瀏覽

如何從對介面的引用中取得對具體類型的引用

在PHP中,介面是定義了一組方法的抽象類別。我們可以透過實作介面來保證類別具有特定的行為。然而,有時候我們需要從對介面的引用中取得具體類型的引用。這在某些情況下可能會導致一些困惑。所以,本文將向大家介紹如何從介面的引用中取得具體類型的引用。無論您是初學者還是有一定經驗的開發者,本文都將對您有所幫助。接下來,讓我們進入正題,一起探索這個問題的解決方案。

問題內容

我試著去了解 go 中的方法、介面和具體類型是如何運作的。

比如,這裡。

我的程式碼為:

type i interface {mymethod(....)}
type a struct{i i....} 
func (a *a) mymethod(....) {
}

所以a實作了介面i。

在客戶端程式碼中:

i := somefunction(....) // i is of type I
i.MyMethod(....)

如何從 i 取得 a 的引用?

解決方法

  • 一組方法簽章儲存在介面類型中。 介面中定義的方法的任何實作都可以儲存為其值。

  • 如果變數是使用介面類型定義的,可以存取介面中定義的方法以及與實作的類型關聯的其他方法無法存取

介面:

type i interface {
    value() string
}

實作:

type a string

func(a a) value() string {
    return string(a)
}

func (a a) type() string {
 return  reflect.typeof(a).name()
}

在客戶端程式碼中:

    // define a variable with the type of i.
    var a i = a("a") 

    // method value() defined in the i interface can be
    // called.
    value := a.value()

     // method type() can not be called, because it is not defined in the interface.
    typ := a.type()

注意:如果使用指標接收器實作方法,如下所示。您需要將實作的指標指派給i

實作:

type a string
func(a *a) value() string {
  return string(a)
}

在客戶端程式碼中:

 a := A("a")
 var i I = &a 

以上是如何從對介面的引用中取得對具體類型的引用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除