go中的接口

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

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

    package main spa

    import "fmt" 指針

    type act interface {                                       //定義一個act接口,包含一個write方法
code

      write() 對象

  } 接口

  type xiaoming struct {                                    //xiaoming結構體
it

  } io

  type xiaofang struct {                                     //xiaofang結構體
class

   }

  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 來源:慕課網
相關文章
相關標籤/搜索