最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言接口的嵌套的具體使用

 更新時間:2023年04月16日 11:34:44   作者:C語言中文網(wǎng)  
在Go語言中,不僅結構體與結構體之間可以嵌套,接口與接口間也可以通過嵌套創(chuàng)造出新的接口,本文主要介紹了Go語言接口的嵌套的具體使用,感興趣的可以了解一下

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

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

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

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 設備的數(shù)據(jù)寫入。
  • 第 5 行定義了關閉器(Closer),如有非托管內(nèi)存資源的對象,需要用關閉的方法來實現(xiàn)資源釋放。
  • 第 9 行定義了寫入關閉器(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"
)
// 聲明一個設備結構
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() {
    // 聲明寫入關閉器, 并賦予device的實例
    var wc io.WriteCloser = new(device)
    // 寫入數(shù)據(jù)
    wc.Write(nil)
    // 關閉設備
    wc.Close()
    // 聲明寫入器, 并賦予device的新實例
    var writeOnly io.Writer = new(device)
    // 寫入數(shù)據(jù)
    writeOnly.Write(nil)
}

代碼說明如下:

  • 第 8 行定義了 device 結構體,用來模擬一個虛擬設備,這個結構會實現(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)用關系使用圖方式來展現(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)代碼。

到此這篇關于Go語言接口的嵌套的具體使用的文章就介紹到這了,更多相關Go語言接口嵌套內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Go設計模式之訪問者模式講解和代碼示例

    Go設計模式之訪問者模式講解和代碼示例

    訪問者是一種行為設計模式, 允許你在不修改已有代碼的情況下向已有類層次結構中增加新的行為,本文將通過代碼示例給大家詳細的介紹一下Go設計模式之訪問者模式,需要的朋友可以參考下
    2023-08-08
  • golang使用aes庫實現(xiàn)加解密操作

    golang使用aes庫實現(xiàn)加解密操作

    這篇文章主要介紹了golang使用aes庫實現(xiàn)加解密操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • grpcurl通過命令行訪問gRPC服務

    grpcurl通過命令行訪問gRPC服務

    這篇文章主要為大家介紹了grpcurl通過命令行訪問gRPC服務示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Go語言中ORM框架GORM使用介紹

    Go語言中ORM框架GORM使用介紹

    GORM是Go語言中最受歡迎的ORM庫之一,它提供了強大的功能和簡潔的?API,讓數(shù)據(jù)庫操作變得更加簡單和易維護,本文將詳細介紹GORM的常見用法,包括數(shù)據(jù)庫連接、模型定義、CRUD、事務管理等方面,幫助大家快速上手使用GORM進行Web后端開發(fā)
    2023-06-06
  • Golang中Append()使用實例詳解

    Golang中Append()使用實例詳解

    今天在刷leetcode的時候,第113題讓我遇到了一個Go語言中append函數(shù)的一個坑,所以復習下,這篇文章主要給大家介紹了關于Golang中Append()使用的相關資料,需要的朋友可以參考下
    2023-01-01
  • Golang實現(xiàn)自己的Redis(有序集合跳表)實例探究

    Golang實現(xiàn)自己的Redis(有序集合跳表)實例探究

    這篇文章主要為大家介紹了Golang實現(xiàn)自己的Redis(有序集合跳表)實例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • go-zero接入skywalking實現(xiàn)鏈路追蹤的詳細教程

    go-zero接入skywalking實現(xiàn)鏈路追蹤的詳細教程

    SkyWalking是一個開源的服務追蹤系統(tǒng),它專注于分布式系統(tǒng)的可觀測性和服務性能分析,它的主要目標是幫助開發(fā)者理解和優(yōu)化微服務架構中的服務間交互情況,本文介紹了go-zero接入skywalking鏈路追蹤的詳細教程,需要的朋友可以參考下
    2024-08-08
  • 這些關于Go中interface{}的注意事項你都了解嗎

    這些關于Go中interface{}的注意事項你都了解嗎

    這篇文章主要為大家詳細介紹了學習Go語言時需要了解的interface{}注意事項,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-03-03
  • Go語言中常量和變量的定義、使用規(guī)范及常見應用場景

    Go語言中常量和變量的定義、使用規(guī)范及常見應用場景

    每一門語言都會有常量的定義,變量的定義,以及基于這些定義的運算,下面這篇文章主要給大家介紹了關于Go語言中常量和變量的定義、使用規(guī)范及常見應用場景的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-06-06
  • 詳解Golang中零拷貝的原理以及實踐

    詳解Golang中零拷貝的原理以及實踐

    零拷貝技術相信大家都有所耳聞,但是本文不僅會講述零拷貝技術的原理,并將從實際代碼出發(fā),看看零拷貝技術在golang中的應用,現(xiàn)在讓我們開始吧
    2023-07-07

最新評論

九龙县| 新余市| 宁安市| 云梦县| 贡觉县| 九江县| 明光市| 合山市| 保山市| 咸阳市| 辉南县| 东乌| 鄄城县| 上高县| 慈利县| 弋阳县| 吉林省| 富民县| 鱼台县| 高唐县| 明水县| 鄯善县| 兰考县| 吉木萨尔县| 轮台县| 叙永县| 鱼台县| 崇州市| 耿马| 庐江县| 年辖:市辖区| 石嘴山市| 内黄县| 弥渡县| 乌拉特后旗| 合作市| 灌云县| 辉南县| 海安县| 吉木萨尔县| 黑龙江省|