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

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

王林
Freigeben: 2024-02-09 17:45:08
nach vorne
797 Leute haben es durchsucht

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>
Nach dem Login kopieren

Ich erwarte diese Ausgabe:

1: Audio 14 seconds
2: Image 1111x9989
3: Image 1234x5678
Nach dem Login kopieren

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) {
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage