首頁  >  文章  >  後端開發  >  如何在Go中存取父類型物件中的子類型屬性?

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

王林
王林轉載
2024-02-09 17:45:08785瀏覽

如何在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刪除
上一篇:編組時轉換值下一篇:編組時轉換值