首頁 > 後端開發 > Golang > 如何將泛型與自訂類型一起使用?

如何將泛型與自訂類型一起使用?

王林
發布: 2024-02-09 15:50:09
轉載
1161 人瀏覽過

如何將泛型與自訂類型一起使用?

php小編百草為您介紹如何將泛型與自訂類型一起使用。泛型是一種在程式設計中常用的技術,它可以使程式碼更加靈活和可重複使用。而自訂類型則是根據業務需求,開發者自己定義的資料類型。當我們需要在自訂類型中使用泛型時,可以透過泛型類別或泛型介面來實現。透過合理運用泛型與自訂類型的結合,我們可以更好地提高程式碼的可維護性和擴充性。在接下來的文章中,我們將詳細介紹如何將泛型與自訂類型一起使用的具體方法和注意事項。

問題內容

我真的很困惑泛型的規則是如何運作的。我只是想讓一個函數接受多種自訂類型,並且每種類型都有不同的邏輯。

type myObjOne struct {
    myfield        string
}

type myObjTwo struct {
    myObjTwo
    myOtherField   string
}

type Generic interface {
    myObjOne | myObjTwo
}

func derp[T Generic](c T) {
    switch any(c).(type) {
    case myObjOne:
        // I can't access the fields of my types like this
        c.myfield = "sdfsfsdfdsf"
    case myObjTwo:
        c.myOtherField = "sdfsfsdfdsf"
    }
    return
}
登入後複製

為什麼 c.myfield 拋出 c.myfield 未定義(類型 T 沒有欄位或方法 myfield)compilerMissingFieldOrMethod

解決方法

c 是型別 T,而不是型別斷言的結果。透過將類型斷言的結果指派給變數來修復。

func derp[T Generic](c T) {
    switch c := any(c).(type) {
    case myObjOne:
        // I can't access the fields of my types like this
        c.myfield = "sdfsfsdfdsf"
    case myObjTwo:
        c.myOtherField = "sdfsfsdfdsf"
    }
    return
}
登入後複製

此程式碼在類型開關中宣告了第二個變數 cc 的型別取決於交換器的分支。

以上是如何將泛型與自訂類型一起使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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