首頁  >  文章  >  後端開發  >  ## Go 中如何將介面分片轉換為相容的介面分片?

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-24 18:28:55766瀏覽

## 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn