日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

go中的接口

發布時間:2024/9/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 go中的接口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對于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 成員方法去計算周長和面積,可以看出,接口的作用就在于去作為"中間體"去調用結構體的成員方法??沒有必要再去對接口內部的方法進行重新定義!!總之,使用接口可以非常靈活,而且與具體的實現做了解耦,如果以后有其他的實現類,只需要實現接口就可以了,而不用去改使用的時候的代碼。

總結

以上是生活随笔為你收集整理的go中的接口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。