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

如何在Go中存取父類型物件中的子類型屬性?

王林
發布: 2024-02-09 17:45:08
轉載
764 人瀏覽過

如何在Go中存取父類型物件中的子類型屬性?

在Go語言中,我們經常會遇到需要在父類型物件中存取子類型屬性的情況。這可能是因為我們在定義結構體時,使用了嵌套結構體的方式。但是,由於Go語言中是沒有繼承的概念的,所以不能直接透過父類型物件來存取子類型屬性。那麼,如何在Go中實現這個需求呢?下面,我將為大家介紹幾種常用的方法。

問題內容

我正在建立一個檔案儲存。我正在嘗試創建不同類型的文件。為了模擬這個,我使用程式碼:

<code>package main

import (
    "fmt"
    "time"
)

type File interface{}

type Audio struct {
    File
    Duration time.Duration
}

type Image struct {
    File
    Width  uint
    Height uint
}

func main() {
    var files = map[string]File{
        "1": Audio{
            Duration: 14 * time.Second,
        },
        "2": Image{
            Height: 9989,
            Width:  1111,
        },
        "3": Image{
                        Width:  1234,
            Height: 5678,
        },
    }
    for k, v := range files {
        switch v.(type) {
        case Audio:
            fmt.Printf("%s: Audio %d seconds", k, v.Duration / time.Second)
        case Image:
            fmt.Printf("%s: Image %dx%d", k, v.Width, v.Height)
        }
    }
}
</code>
登入後複製

我期待這個輸出:

1: Audio 14 seconds
2: Image 1111x9989
3: Image 1234x5678
登入後複製

但是 Go 編譯器給了我這個錯誤:

./main.go:38:44: v.Duration 未定義(類型 File 沒有欄位或方法 Duration)

# ./main.go:40:39: v.Width 未定義(類型 File 沒有欄位或方法 Width)

# ./main.go:40:48: v.Height 未定義(類型 File 沒有欄位或方法 Height)

如何修復錯誤?

解決方法

switch v := v.(type) {
登入後複製

將使用您期望的類型宣告一個新的 v

以上是如何在Go中存取父類型物件中的子類型屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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