首頁 > 後端開發 > Golang > 主體

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

王林
發布: 2024-02-09 16:39:14
轉載
889 人瀏覽過

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

在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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!