Heim  >  Artikel  >  Backend-Entwicklung  >  Wie greife ich in Go auf Subtypeigenschaften im übergeordneten Typobjekt zu?

Wie greife ich in Go auf Subtypeigenschaften im übergeordneten Typobjekt zu?

王林
王林nach vorne
2024-02-09 17:45:08785Durchsuche

Wie greife ich in Go auf Subtypeigenschaften im übergeordneten Typobjekt zu?

In der Go-Sprache stoßen wir häufig auf Situationen, in denen wir auf Untertypeigenschaften in übergeordneten Typobjekten zugreifen müssen. Dies kann daran liegen, dass wir beim Definieren der Struktur verschachtelte Strukturen verwenden. Da es in der Go-Sprache jedoch kein Vererbungskonzept gibt, kann auf Subtypeigenschaften nicht direkt über das übergeordnete Typobjekt zugegriffen werden. Wie kann diese Anforderung in Go umgesetzt werden? Im Folgenden stelle ich Ihnen einige häufig verwendete Methoden vor.

Frageninhalt

Ich erstelle einen Dateispeicher. Ich versuche, verschiedene Dateitypen zu erstellen. Um dies zu simulieren, verwende ich den Code:

<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>

Ich erwarte diese Ausgabe:

1: Audio 14 seconds
2: Image 1111x9989
3: Image 1234x5678

Aber der Go-Compiler hat mir diesen Fehler angezeigt:

./main.go:38:44: v.Duration ist undefiniert (Typ Datei hat kein Feld oder Methode Duration)

./main.go:40:39: v.Width undefiniert (Typ Datei hat kein Feld oder Methodenbreite)

./main.go:40:48: v.Height ist undefiniert (Typ Datei hat kein Feld oder Methode Height)

Wie kann der Fehler behoben werden?

Lösung

switch v := v.(type) {

wird ein neues v mit dem von Ihnen erwarteten Typ deklarieren.

Das obige ist der detaillierte Inhalt vonWie greife ich in Go auf Subtypeigenschaften im übergeordneten Typobjekt zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen