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

go語言中介面的使用

發布: 2019-11-29 15:24:23
轉載
2877 人瀏覽過

go語言中介面的使用

在Go中,介面interface其實跟其他語言的介面意思也沒什麼差別。 interface理解其為一種類型的規範或約定。一種類型是不是「實現」了一個介面呢?就看這種類型是不是實作了介面中定義的所有方法。 (推薦:go語言教學

1、介面的定義與使用。

例如

type I interface{
    Get() int
    Put(int)
 
}
登入後複製

這段話就定義了一個接口,它包含兩個函數Get和Put

好了,我的一個接口實作了這個介面:

type S struct {val int}
func (this *S) Get int {
    return this.val
}
func (this *S)Put(v int) {
    this.val = v
 
}
登入後複製

這個結構S就是實作了介面I

#2、空介面

##對於空介面interface{} 其實和泛型的概念很像。任何類型都實作了空接口。

下面舉個例子:

一個函數實作這樣的功能:

以任何物件作為參數,如果這個物件是實作了介面I,那麼就呼叫介面I的Get方法

很多語言都是這樣的邏輯:

function g(obj){
    if (obj is I) {
        return (I)obj.Get()
    }
 
}
登入後複製

Go中是這樣實現的:

func g(any interface{}) int {
    return any.(I).Get()
 
}
登入後複製

這裡的any.(I)是不是很語意化? 「任何實作了I介面的物件」

3、Go中interface的寫法:

下面看幾個interface的範例:

func SomeFunction(w interface{Write(string)}){
    w.Write("pizza")
 
}
登入後複製

這個範例中,直接將interface定義在參數中,很特別…

func weirdFunc( i int ) interface{} {
  if i ==  0 {
    return "zero"
  }
  return i;
}
登入後複製
這裡範例中,由於有可能傳回string,也有可能傳回int,因此將傳回值設為interface ,這個在Go的package包中會大量見到。

以上是go語言中介面的使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:cnblogs.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板