go中的介面

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

  對於golang的介面,糾結兩天了,今天有種茅塞頓開的感覺,有必要寫點東西了。

  糾結介面,說白了就是搞不透介面,方法,結構體幾者之間的關係以及具體的用途。可以簡單的從三者的定義說起,介面說白了就是一個方法(method)集,結構體就是一個類,通常儲存屬性,方法相當於類的函數,不過有兩種類型的接受者(對象),一種是值,一種是指標,指標能改變結構體中的屬性值。在go中,只要結構體的方法實現(包含)了介面中所有的方法,就可以說這個結構體實現了這個介面。定義講清楚後可以看看介面到底有什麼用了,接下來給出兩段代碼。

    package main

    import "fmt"

    type act interface {                                       //定義一個act介面,包含一個write方法

      write()

  }

  type xiaoming struct {                                    //xiaoming結構體

  }

  type xiaofang struct {                                     //xiaofang結構體

   }

  func (xm *xiaoming) write() {                         //xiaoming結構體的方法write,接收者為指標類型。即xiaoming實現了act介面

    fmt.Println("xiaoming write")

  }

  func (xf *xiaofang) write() {                          //同上,xiaofang實現了act介面

    fmt.Println("xiaofang write")

  }

  func main() {

    var w act                                     

    xm := xiaoming{}

    xf := xiaofang{}

    w = &xm                                          //執行個體化介面,由於xm是指標類型的接收者,必須加&

    w.write()

    w = &xf                                           //同上

    w.write()

  }

  輸出結果為:xiaoming write
        xiaofang write

  這個例子同樣能說明go語言物件導向的多態性質。介面實際上是作為中間體調用結構體的方法。

  第二個例子:

該介面有兩個方法,Area和Perimeter,並且分別寫了兩個Get方法,用來分別計算面積和周長(這一步其實是沒用的)

。隨後,分別定義了長方形和圓形的結構體,並且分別實現了 Shape 介面.

在 func main() {} 中,分別用了 Get 方法和調用 interface 成員方法去計算周長和面積,可以看出, 介面的作用就在於去作為"中間體"去調用結構體的成員方法

沒有必要再去對介面內部的方法進行重新定義!!總之,使用介面可以非常靈活,而且與具體的實現做瞭解耦,如果以後有其他的實作類別,只需要實現介面就可以了,而不用去改使用的時候的代碼。

    

type Rect struct { width, height float64 } func (r *Rect) area() float64 { return r.width * r.height } func (r *Rect) perimeter() float64 { return (r.height + r.width) * 2 } //------------圓形------------// type Circle struct { radius float64 } func (c *Circle) area() float64 { return math.Pi * c.radius * c.radius } func (c *Circle) perimeter() float64 { return 2 * math.Pi * c.radius }
作者: 鐵心木吉
連結:http://www.imooc.com/article/4579
來源:慕課網

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.