首頁 > 後端開發 > Golang > 主體

## Go 中如何將介面分片轉換為相容的介面分片?

Mary-Kate Olsen
發布: 2024-10-24 18:28:55
原創
782 人瀏覽過

## How to Convert a Slice of Interfaces to a Compatible Interface Slice in Go?

將介面切片轉換為相容的介面切片

實作包含重疊方法的不同介面可以提供程式彈性。但是,將一個介面的一部分傳遞給需要不同但相容的介面的函數可能會導致錯誤。讓我們探討如何在 Go 中解決這個問題。

假設我們有介面 A 和 B,其中 A 包含 B。 A 的實現 Impl 滿足 A 和 B。

<code class="go">type A interface {
    Close() error
    Read(b []byte) (int, error)
}

type Impl struct {}

func (I Impl) Read(b []byte) (int, error) {
    fmt.Println("In read!")
    return 10, nil
}

func (I Impl) Close() error {
    fmt.Println("I am here!")
    return nil
}</code>
登入後複製

單一項目可以輕鬆地跨函數傳遞。但是,嘗試將 A 的切片傳遞給需要 io.Reader 的函數可能會失敗。

<code class="go">func single(r io.Reader) {
    fmt.Println("in single")
}

func slice(r []io.Reader) {
    fmt.Println("in slice")
}

im := &Impl{}

// works
single(im)

// FAILS!
list := []A{t}
slice(list)</code>
登入後複製

要解決此問題,我們可以建立一個 []io.Reader 類型的新切片,並用 [ 中的元素填充它。 ]一個。這是繞過限制並確保不同但重疊的介面類型之間的相容性的解決方法。

以上是## Go 中如何將介面分片轉換為相容的介面分片?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!