日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)GO教程:Go語言接口的嵌套組合

在Go語言中,不僅結(jié)構(gòu)體與結(jié)構(gòu)體之間可以嵌套,接口與接口間也可以通過嵌套創(chuàng)造出新的接口。

創(chuàng)新互聯(lián)長期為1000多家客戶提供的網(wǎng)站建設(shè)服務,團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為遂平企業(yè)提供專業(yè)的成都做網(wǎng)站、成都網(wǎng)站制作,遂平網(wǎng)站改版等技術(shù)服務。擁有十年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

一個接口可以包含一個或多個其他的接口,這相當于直接將這些內(nèi)嵌接口的方法列舉在外層接口中一樣。只要接口的所有方法被實現(xiàn),則這個接口中的所有嵌套接口的方法均可以被調(diào)用。

系統(tǒng)包中的接口嵌套組合

Go語言的 io 包中定義了寫入器(Writer)、關(guān)閉器(Closer)和寫入關(guān)閉器(WriteCloser)3 個接口,代碼如下:

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

type Closer interface {
    Close() error
}

type WriteCloser interface {
    Writer
    Closer
}

代碼說明如下:

  • 第 1 行定義了寫入器(Writer),如這個接口較為常用,常用于 I/O 設(shè)備的數(shù)據(jù)寫入。
  • 第 5 行定義了關(guān)閉器(Closer),如有非托管內(nèi)存資源的對象,需要用關(guān)閉的方法來實現(xiàn)資源釋放。
  • 第 9 行定義了寫入關(guān)閉器(WriteCloser),這個接口由 Writer 和 Closer 兩個接口嵌入。也就是說,WriteCloser 同時擁有了 Writer 和 Closer 的特性。

在代碼中使用接口嵌套組合

在代碼中使用 io.Writer、io.Closer 和 io.WriteCloser 這 3 個接口時,只需要按照接口實現(xiàn)的規(guī)則實現(xiàn) io.Writer 接口和 io.Closer 接口即可。而 io.WriteCloser 接口在使用時,編譯器會根據(jù)接口的實現(xiàn)者確認它們是否同時實現(xiàn)了 io.Writer 和 io.Closer 接口,詳細實現(xiàn)代碼如下:

package main

import (
    "io"
)

// 聲明一個設(shè)備結(jié)構(gòu)
type device struct {
}

// 實現(xiàn)io.Writer的Write()方法
func (d *device) Write(p []byte) (n int, err error) {
    return 0, nil
}

// 實現(xiàn)io.Closer的Close()方法
func (d *device) Close() error {
    return nil
}

func main() {

    // 聲明寫入關(guān)閉器, 并賦予device的實例
    var wc io.WriteCloser = new(device)

    // 寫入數(shù)據(jù)
    wc.Write(nil)

    // 關(guān)閉設(shè)備
    wc.Close()

    // 聲明寫入器, 并賦予device的新實例
    var writeOnly io.Writer = new(device)

    // 寫入數(shù)據(jù)
    writeOnly.Write(nil)

}

代碼說明如下:

  • 第 8 行定義了 device 結(jié)構(gòu)體,用來模擬一個虛擬設(shè)備,這個結(jié)構(gòu)會實現(xiàn)前面提到的 3 種接口。
  • 第 12 行,實現(xiàn)了 io.Writer 的 Write() 方法。
  • 第 17 行,實現(xiàn)了 io.Closer 的 Close() 方法。
  • 第 24 行,對 device 實例化,由于 device 實現(xiàn)了 io.WriteCloser 的所有嵌入接口,因此 device 指針就會被隱式轉(zhuǎn)換為 io.WriteCloser 接口。
  • 第 27 行,調(diào)用了 wc(io.WriteCloser接口)的 Write() 方法,由于 wc 被賦值 *device,因此最終會調(diào)用 device 的 Write() 方法。
  • 第 30 行,與 27 行類似,最終調(diào)用 device 的 Close() 方法。
  • 第 33 行,再次創(chuàng)建一個 device 的實例,writeOnly 是一個 io.Writer 接口,這個接口只有 Write() 方法。
  • 第 36 行,writeOnly 只能調(diào)用 Write() 方法,沒有 Close() 方法。

為了整理思路,將上面的實現(xiàn)、調(diào)用關(guān)系使用圖方式來展現(xiàn),參見圖 1 和圖 2。

1) io.WriteCloser的實現(xiàn)及調(diào)用過程如圖 1 所示。



圖1:io.WriteCloser 的實現(xiàn)及調(diào)用過程

2) io.Writer 的實現(xiàn)調(diào)用過程如圖 2 所示。



圖2:io.Write 的實現(xiàn)及調(diào)用過程

給 io.WriteCloser 或 io.Writer 更換不同的實現(xiàn)者,可以動態(tài)地切換實現(xiàn)代碼。


文章題目:創(chuàng)新互聯(lián)GO教程:Go語言接口的嵌套組合
當前URL:http://www.5511xx.com/article/dhecghe.html