亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Golang > 正文

初步解讀Golang中的接口相關(guān)編寫方法

2020-04-01 19:12:14
字體:
供稿:網(wǎng)友
這篇文章主要介紹了Golang中的接口相關(guān)編寫方法,是Go語言入門學習中的基礎知識,需要的朋友可以參考下
 

概述
如果說goroutine和channel是Go并發(fā)的兩大基石,那么接口是Go語言編程中數(shù)據(jù)類型的關(guān)鍵。在Go語言的實際編程中,幾乎所有的數(shù)據(jù)結(jié)構(gòu)都圍繞接口展開,接口是Go語言中所有數(shù)據(jù)結(jié)構(gòu)的核心。
Go語言中的接口是一些方法的集合(method set),它指定了對象的行為:如果它(任何數(shù)據(jù)類型)可以做這些事情,那么它就可以在這里使用。

接口的定義和使用

比如

 

復制代碼代碼如下:

type I interface{
    Get() int
    Put(int)
 
}

 

 


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

 

好了,我的一個接口實現(xiàn)了這個接口:

 

復制代碼代碼如下:

type S struct {val int}
func (this *S) Get int {
    return this.val
}
func (this *S)Put(v int) {
    this.val = v
 
}

 

 


這個結(jié)構(gòu)S就是實現(xiàn)了接口I

 

Go中interface的寫法

下面看幾個interface的例子:

 

復制代碼代碼如下:

 

func SomeFunction(w interface{Write(string)}){
    w.Write("pizza")
 
}

 


這個例子中,直接將interface定義在參數(shù)中,很特別…

 

 

復制代碼代碼如下:

func weirdFunc( i int ) interface{} {
  if i ==  0 {
    return "zero"
  }
  return i;
}

 

 


接口賦值
我們可以將一個實現(xiàn)接口的對象實例賦值給接口,也可以將另外一個接口賦值給接口。

 

(1)通過對象實例賦值

將一個對象實例賦值給一個接口之前,要保證該對象實現(xiàn)了接口的所有方法??紤]如下示例:

 

復制代碼代碼如下:

type Integer int
func (a Integer) Less(b Integer) bool {
 return a < b
}
func (a *Integer) Add(b Integer) {
 *a += b
}

 

type LessAdder interface { 
 Less(b Integer) bool 
 Add(b Integer)
}

var a Integer = 1
var b1 LessAdder = &a //OK
var b2 LessAdder = a   //not OK

 


b2的賦值會報編譯錯誤,為什么呢?還記得<類型方法>一章中討論的Go語言規(guī)范的規(guī)定嗎?

 

The method set of any other named type T consists of all methods with receiver type T. The method set of the corresponding pointer type T is the set of all methods with receiver T or T (that is, it also contains the method set of T).
也就是說*Integer實現(xiàn)了接口LessAdder的所有方法,而Integer只實現(xiàn)了Less方法,所以不能賦值。

(2)通過接口賦值

 

復制代碼代碼如下:

 

        var r io.Reader = new(os.File)
        var rw io.ReadWriter = r   //not ok

        var rw2 io.ReadWriter = new(os.File)
        var r2 io.Reader = rw2    //ok

 


因為r沒有Write方法,所以不能賦值給rw。

 

接口嵌套
我們來看看io package中的另外一個接口:

 

復制代碼代碼如下:

 

// ReadWriter is the interface that groups the basic Read and Write methods.
type ReadWriter interface {
 Reader
 Writer
}

 


該接口嵌套了io.Reader和io.Writer兩個接口,實際上,它等同于下面的寫法:

 

 

復制代碼代碼如下:

 

type ReadWriter interface {
Read(p []byte) (n int, err error) 
Write(p []byte) (n int, err error)
}

 


注意,Go語言中的接口不能遞歸嵌套,

 

 

復制代碼代碼如下:

 

// illegal: Bad cannot embed itself
type Bad interface {
 Bad
}

// illegal: Bad1 cannot embed itself using Bad2
type Bad1 interface {
 Bad2
}
type Bad2 interface {
 Bad1
}

 


 

空接口(empty interface)
空接口比較特殊,它不包含任何方法:

 

復制代碼代碼如下:
interface{}

在Go語言中,所有其它數(shù)據(jù)類型都實現(xiàn)了空接口。

 

 

復制代碼代碼如下:

 

var v1 interface{} = 1
var v2 interface{} = "abc"
var v3 interface{} = struct{ X int }{1}

 


如果函數(shù)打算接收任何數(shù)據(jù)類型,則可以將參考聲明為interface{}。最典型的例子就是標準庫fmt包中的Print和Fprint系列的函數(shù):

 

 

復制代碼代碼如下:

 

func Fprint(w io.Writer, a ...interface{}) (n int, err error) 
func Fprintf(w io.Writer, format string, a ...interface{})
func Fprintln(w io.Writer, a ...interface{})
func Print(a ...interface{}) (n int, err error)
func Printf(format string, a ...interface{})
func Println(a ...interface{}) (n int, err error)

 


注意,[]T不能直接賦值給[]interface{}

 

 

復制代碼代碼如下:

 

        t := []int{1, 2, 3, 4}
        var s []interface{} = t

 


編譯時會輸出下面的錯誤:

 

cannot use t (type []int) as type []interface {} in assignment

我們必須通過下面這種方式:

 

復制代碼代碼如下:

 

t := []int{1, 2, 3, 4}
s := make([]interface{}, len(t))
for i, v := range t {
    s[i] = v
}

 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产在线精品播放| 美女福利一区二区| 性xxxx搡xxxxx搡欧美| 伦理在线一区| 国产精品区在线| 欧美日一区二区三区在线观看国产免| 亚洲神马久久| 丝袜亚洲另类欧美重口| 亚洲乱码国产乱码精品精大量| 国产在线播放观看| 中文字幕日韩av资源站| 69**夜色精品国产69乱| 惠美惠精品网| 美女脱光内衣内裤视频久久网站| 亚洲日本韩国一区| 久久久久99精品成人片| 成年人免费网站在线观看| 先锋影视中文字幕| 日韩欧美色电影| 欧美—级在线免费片| 日韩欧美视频在线| av色综合久久天堂av色综合在| 欧美影片第一页| 9久久9毛片又大又硬又粗| 精东影业在线观看| 91蜜桃视频在线观看| 久久久久av| 成人av资源网站| 天天做夜夜做人人爱精品| 亚洲小视频在线| 激情六月婷婷久久| 四虎国产精品永久在线国在线| 免看一级a毛片一片成人不卡| 亚洲综合精品国产一区二区三区| 国产高清精品在线观看| 5月丁香婷婷综合| 大香伊人久久精品一区二区| 网站一区二区| ass极品国模人体欣赏| 717影院理论午夜伦不卡久久| 午夜精品国产精品大乳美女| 日韩精品一区二区三区在线播放| 丰满少妇一级片| 免费看91的网站| 夜先锋资源网| 午夜视频福利在线观看| 欧美中文字幕一二三四区| 亚洲一区二区三区精品动漫| 天天干天天操天天爽| 亚洲欧美影院| 成人黄色国产精品网站大全在线免费观看| 免费成人av在线播放| 在线观看精品视频一区二区三区| 国产乱码精品一区二区三区精东| 欧美一区2区视频在线观看| 久久国产精品72免费观看| 永久免费看mv网站入口| 青青草av网站| 亚洲专区在线播放| 亚洲中文字幕在线观看| 亚洲va男人天堂| 国产精品99蜜臀久久不卡二区| 久久久久久国产精品三级玉女聊斋| 日本久久国产| 欧美亚洲一级| av电影在线观看网站| 在线视频一区二区三区四区| 电影一区电影二区| 中文字幕一区二区免费| 久久久伦理片| 精彩视频一区二区| 伊人在我在线看导航| 狠狠色丁香久久婷婷综| 最新天堂资源在线资源| 在线观看视频色潮| 日韩成人精品一区二区三区| 午夜电影福利网| 6080yy精品一区二区三区| 国产精品对白刺激| 99热精品一区二区| 91吃瓜网在线观看| 欧美国产视频在线观看| 欧美日韩国产在线观看网站| 国产亚洲毛片| 亚洲人成电影网| 中文字幕av观看| 18av.com视频| 中文字幕av亚洲精品一部二部| 亚洲精品老司机| 电影k8一区二区三区久久| 日韩高清免费在线| 国产大片在线免费观看| 日本中文字幕免费| 日韩欧美国产一区二区| 玩弄japan白嫩少妇hd| 国产精品美女久久久久久| 97人人澡人人爽| 一个人在线视频免费观看www| 国产乱理伦片a级在线观看| 亚洲一区免费看| 黄频免费在线观看| 成人国产1314www色视频| 97欧洲一区二区精品免费| 日本人成精品视频在线| 成年网站在线免费观看| 日本中文字幕二区| 中文字幕一区二区精品区| 国产盗摄一区二区三区在线| 中文幕一区二区三区久久蜜桃| 国产91在线播放九色| 日韩成人精品在线观看| 国产91九色视频| 久久精品国产一区二区三区不卡| 国产精品二区在线| 久久久久麻豆v国产精华液好用吗| 日本韩国一区二区三区| 日韩精品电影| 婷婷丁香激情综合| 亚洲欧美日韩综合精品网| 国产伦精品一区二区三区视频女| av日韩免费电影| 97久久精品一区二区三区的观看方式| 亚洲欧美日韩区| 久久成人综合网| 国产精品视频免费看| 日韩欧美视频在线免费观看| 一个色免费成人影院| 国产精品无码在线| 成人激情视频小说免费下载| 免费黄色av片| 91社区视频在线观看| 一区二区三区在线不卡| 国产精品啪啪啪视频| 欧美成人免费网| 9999久久久久| 久久久精品性| 亚洲视频久久| 成人激情黄色小说| 日本亚洲视频在线| 免费无码毛片一区二三区| avtt综合网| 国产精品色呦呦| 91av视频导航| 日韩午夜电影在线观看| xxxxxxxxx欧美| 日韩成人在线一区| 韩国三级大全久久网站| 欧美sm精品调教视频| 色婷婷综合久久| 激情小说图片视频| 国产又大又黄又粗的视频| 在线观看污网站| 综合一区二区三区| 能免费看av的网站| 久久99精品久久久久久欧洲站| 一区二区三区四区毛片| 久草国产精品视频| 老司机凹凸av亚洲导航| 日韩在线xxx| 天天爽夜夜爽夜夜爽| 精品视频www| 成人在线观看a| 97久久天天综合色天天综合色hd| 国产精品男人爽免费视频1| 国产av精国产传媒| 日韩av电影免费在线| 国产性xxxx| 亚洲国产成人va在线观看天堂| 久久看片网站| 久久九九热re6这里有精品| 中文字幕国产综合| 久久天堂影院| 亚洲视频在线看| 成人免费视频在线观看| 国产精品久久久久9999| 日本久久久久久| 精品电影一区二区三区| 欧美成人一二区| 国产精品7777777| 亚洲国产精品第一区二区三区| 亚洲欧洲激情在线| 草草草视频在线观看| 亚洲国产中文字幕久久网| 路边理发店露脸熟妇泻火| 成人午夜天堂| 精品伊人久久| 日韩伦理一区| 99久久精品费精品国产风间由美| 性无码专区无码| 中文久久电影小说| 国产一区二区三区黄| www视频免费看| 九七影院97影院理论片免费| 国产亚洲欧美日韩一区二区| 国内精品视频免费| 色综合久久88色综合天天提莫| 亚洲精品影片| 日韩一区二区视频在线观看| 亚洲伊人一本大道中文字幕| 黄色大片a级| 粉嫩av国产一区二区三区| 日韩精品一区在线视频| 影音先锋在线国产| 亚洲精品美女免费| 男女啪啪无遮挡| 欧美猛男gaygay网站| 99re6热只有精品免费观看| 视频一区二区三区四区五区| 亚洲av毛片基地| 成人福利免费在线观看| 久久精品亚洲成在人线av网址| 日本韩国一区二区三区视频| 成年人视频免费| 欧美视频日韩| 亚洲一区二区精品在线| xxxxxx欧美| eeuss影院www影院| 色嗨嗨av一区二区三区| 在线码字幕一区| 全部av―极品视觉盛宴亚洲| 国产超级av在线| avav在线播放| 欧美色图免费看| 8×8x拔擦拔擦在线视频网站| 欧美videos粗暴| 成人天堂入口网站| 69久久精品无码一区二区| 天天爱天天干天天操| 51精产品一区一区三区| 亚洲欧美综合在线观看| 婷婷国产精品| 色偷偷久久一区二区三区| 日本一区精品久久久久影院| 免费成人深夜蜜桃视频| 国产欧美久久一区二区三区| 精品久久久久一区| 国产精品爱久久久久久久| 色欧美片视频在线观看在线视频| 9色porny| 亚洲成人精品在线观看| 日韩精品免费视频人成| 精品视频一区二区三区四区五区| 高清日韩一区| 国产精品福利视频一区二区三区| 日本一本在线观看| 欧美日韩一区在线播放| 久久精品亚洲国产| 婷婷激情四射五月天| 日韩电影在线一区| 大陆极品少妇内射aaaaa| www.天堂在线观看| 男人草女人视频| 欧美91精品| 欧美丝袜足交| 精品视频在线观看免费| 欧美精品午夜| 久久精品中文| 欧美第一黄网免费网站| 神马影院午夜我不卡| 国产精品久久久网站| 成人影院在线免费观看| 亚洲永久在线观看| 国产一区二区三区四| 日韩精品电影在线| 麻豆一区产品精品蜜桃的特点| av有声小说一区二区三区| 黄色国产在线观看| 黄瓜视频18免费观看| 国产一区 二区 三区一级| 最近中文字幕mv免费高清电影| 亚洲999一在线观看www| 一区二区视频免费在线观看| 紧身裙女教师波多野结衣| 国产精品久久久久久久浪潮网站| 五月天色婷婷丁香| porn亚洲| 欧美日韩视频在线第一区| 亚洲人成网77777色在线播放| 九七久久人人| 国产精品网址在线| 国产欧美日韩久久| 中文字幕 在线观看| 国产网站在线免费观看| 黑人与亚洲人色ⅹvideos| 久久丫精品国产亚洲av不卡| 1313精品午夜理伦电影| av大片免费观看| 狠狠入ady亚洲精品经典电影| 99在线免费观看视频| xxxx成人| 51xx午夜影福利| 欧美一区三区四区| 国产欧美一区二区精品久导航| 欧美亚洲国产成人| 黄色一级大片在线免费看产| 中文字幕1区2区3区| 香蕉成人久久| 91蜜臀精品国产自偷在线| 男女裸体影院高潮| 亚洲 日韩 国产第一| 国产在线a视频| 国产精品成人av久久| 久久国产精品久久精品国产| 日韩免费在线视频观看| 亚洲一区二区三区| 最新中文字幕一区二区三区| 天堂电影一区| 色综合天天视频在线观看| 天天天干夜夜夜操| 一区二区电影网| 国产日韩欧美亚洲| palipali轻量版永久网页入口| 自拍视频第一页| 先锋影音男人资源网| a天堂中文在线观看| 亚洲影视一区二区| 久久久久久久久一区二区| 国产精品成人aaaa在线| 99re在线视频| 亚洲国产精品福利| 亚洲色图网友自拍| 激情六月综合| 日韩电影在线播放| 天堂av在线资源| 日韩免费高清视频网站| 国产精品嫩草视频| 波多野吉衣av| 九色网友自拍视频手机在线|