golang 介面筆記

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

一、概念

介面類型是對其它類型行為的抽象和概括;因為介面類型不會和特定的實現細節綁定在一起,通過這種抽象的方式我們可以讓我們的函數更加靈活和更具有適應能力。

Go語言中介面類型的獨特之處在於它是滿足隱式實現的。也就是說,我們沒有必要對於給定的具體類型定義所有滿足的介面類型;簡單地擁有一些必需的方法就足夠了。

這種設計可以讓你建立一個新的介面類型滿足已經存在的具體類型卻不會去改變這些類型的定義;當我們使用的類型來自於不受我們控制的包時這種設計尤其有用。

二、介面的聲明及使用

package mainimport (    "fmt")type ICale interface {    Sum(a, b int) int}type Computer struct {}func (this *Computer) Sum(a, b int) int {    return a + b}func (this *Computer) Print() int {    fmt.Println("ai")}func main() {    fmt.Println(new(Computer).Sum(1, 2))    var icale ICale = new(Computer)    fmt.Println(icale.Sum(2, 3))}

三、空介面類型:對實現它的類型沒有要求,所以我們可以將任意一個值賦給空介面類型

package mainimport (    "fmt")func main() {    var v interface{}    v = 1    fmt.Println(v)    v = "123"    fmt.Println(v)    v = true    fmt.Println(v)    v = map[string]int{"one": 1}    fmt.Println(v)}
package mainimport (    "fmt")func main() {    print(map[string]int{"one": 1})    print(func() int { return 1 })    print(func() int { return 1 }())}func print(val interface{}) {    fmt.Println(val)}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.