首頁 > 後端開發 > Golang > 如何在 Go 中安全地將結構體指標轉換為介面並返回?

如何在 Go 中安全地將結構體指標轉換為介面並返回?

Mary-Kate Olsen
發布: 2024-12-13 16:41:10
原創
390 人瀏覽過

How Can I Safely Convert a Struct Pointer to an Interface and Back in Go?

將結構指標轉換為介面

考慮以下場景:

type foo struct{}

func bar(baz interface{}) {}
登入後複製

假設foo 和bar 是不可變的並且baz 必須恢復為bar 中的foo 結構體指針,問題就出現了:如何您可以將&foo{} 轉換為 interface{} 用作 bar 中的參數嗎?

將 &foo{} 轉換為 interface{} 很簡單:

f := &foo{}
bar(f) // Every type implements interface{}. No special action is needed.
登入後複製

要回到*foo,您可以執行以下任一操作:

鍵入斷言

func bar(baz interface{}) {
    f, ok := baz.(*foo)
    if !ok {
        // The assertion failed because baz was not of type *foo.
    }

    // f is of type *foo
}
登入後複製

類型切換

func bar(baz interface{}) {
    switch f := baz.(type) {
    case *foo: // f is of type *foo
    default: // f is some other type
    }
}
登入後複製

透過利用這些技術,您可以成功地將結構體指標轉換為介面並將其還原為結構體指標在函數內。

以上是如何在 Go 中安全地將結構體指標轉換為介面並返回?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板