91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go語言接口的嵌套如何使用

發布時間:2023-04-17 17:06:51 來源:億速云 閱讀:118 作者:iii 欄目:開發技術

這篇文章主要講解了“Go語言接口的嵌套如何使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Go語言接口的嵌套如何使用”吧!

在Go語言中,不僅結構體與結構體之間可以嵌套,接口與接口間也可以通過嵌套創造出新的接口。

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

系統包中的接口嵌套組合

Go語言的 io 包中定義了寫入器(Writer)、關閉器(Closer)和寫入關閉器(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 設備的數據寫入。

  • 第 5 行定義了關閉器(Closer),如有非托管內存資源的對象,需要用關閉的方法來實現資源釋放。

  • 第 9 行定義了寫入關閉器(WriteCloser),這個接口由 Writer 和 Closer 兩個接口嵌入。也就是說,WriteCloser 同時擁有了 Writer 和 Closer 的特性。

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

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

package main
import (
    "io"
)
// 聲明一個設備結構
type device struct {
}
// 實現io.Writer的Write()方法
func (d *device) Write(p []byte) (n int, err error) {
    return 0, nil
}
// 實現io.Closer的Close()方法
func (d *device) Close() error {
    return nil
}
func main() {
    // 聲明寫入關閉器, 并賦予device的實例
    var wc io.WriteCloser = new(device)
    // 寫入數據
    wc.Write(nil)
    // 關閉設備
    wc.Close()
    // 聲明寫入器, 并賦予device的新實例
    var writeOnly io.Writer = new(device)
    // 寫入數據
    writeOnly.Write(nil)
}

代碼說明如下:

  • 第 8 行定義了 device 結構體,用來模擬一個虛擬設備,這個結構會實現前面提到的 3 種接口。

  • 第 12 行,實現了 io.Writer 的 Write() 方法。

  • 第 17 行,實現了 io.Closer 的 Close() 方法。

  • 第 24 行,對 device 實例化,由于 device 實現了 io.WriteCloser 的所有嵌入接口,因此 device 指針就會被隱式轉換為 io.WriteCloser 接口。

  • 第 27 行,調用了 wc(io.WriteCloser接口)的 Write() 方法,由于 wc 被賦值 *device,因此最終會調用 device 的 Write() 方法。

  • 第 30 行,與 27 行類似,最終調用 device 的 Close() 方法。

  • 第 33 行,再次創建一個 device 的實例,writeOnly 是一個 io.Writer 接口,這個接口只有 Write() 方法。

  • 第 36 行,writeOnly 只能調用 Write() 方法,沒有 Close() 方法。

為了整理思路,將上面的實現、調用關系使用圖方式來展現,參見圖 1 和圖 2。

1) io.WriteCloser的實現及調用過程如圖 1 所示。

Go語言接口的嵌套如何使用

圖1:io.WriteCloser 的實現及調用過程

2) io.Writer 的實現調用過程如圖 2 所示。

Go語言接口的嵌套如何使用

圖2:io.Write 的實現及調用過程

給 io.WriteCloser 或 io.Writer 更換不同的實現者,可以動態地切換實現代碼。

感謝各位的閱讀,以上就是“Go語言接口的嵌套如何使用”的內容了,經過本文的學習后,相信大家對Go語言接口的嵌套如何使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

弥渡县| 新化县| 临沭县| 常山县| 宣城市| 武义县| 汉阴县| 河池市| 正定县| 万安县| 和静县| 金溪县| 连平县| 深泽县| 宿迁市| 黎平县| 客服| 新巴尔虎右旗| 云阳县| 凤山县| 潮安县| 蓬安县| 日土县| 长武县| 华坪县| 博白县| 缙云县| 苏尼特右旗| 牙克石市| 达拉特旗| 志丹县| 东安县| 唐山市| 闽清县| 治多县| 阳信县| 隆化县| 年辖:市辖区| 延庆县| 孝感市| 五家渠市|