Beim Programmieren kommt es häufig vor, dass Sie auf Situationen stoßen, in denen Sie ein Segment von Schnittstellenwerten typassertieren müssen. Dies kann jedoch manchmal zu Fehlern führen. Lassen Sie uns die Gründe untersuchen, warum die Bestätigung eines Abschnitts von Schnittstellenwerten möglicherweise nicht immer möglich ist.
Beim Versuch, von einem Abschnitt von Schnittstellenwerten aus einen bestimmten Typ zu bestätigen, z. B. []Symbol, []Node , wie im bereitgestellten Beispiel:
args.([]Symbol)
Möglicherweise tritt die folgende Fehlermeldung auf:
invalid type assertion: args.([]Symbol) (non-interface type []Node on left)
Dieser Fehler tritt auf, weil ein Slice, wie z. B. []Node, im Gegensatz zu Node selbst kein Schnittstellentyp ist. Ein Slice besitzt einen eigenen Typ mit eigenen Verhaltensweisen und Methoden. Daher fehlt ihr die Fluidität und Anpassungsfähigkeit einer Schnittstelle, die eine dynamische Änderung des zugrunde liegenden Typs ermöglicht.
Während es praktisch erscheinen mag, einen Teil der Schnittstellenwerte als Schnittstelle zu behandeln, verstößt es grundlegend gegen das Konzept der Typisierung . Im obigen Beispiel besteht die Absicht darin, die Slice-Argumente in ein Slice von Symbolwerten umzuwandeln. Da es sich bei args jedoch um ein Segment von Knotenwerten handelt, kann keine einfache Typzusicherung durchgeführt werden.
Um diese Situation korrekt zu handhaben, können Sie einen alternativen Ansatz verwenden:
symbols := make([]Symbol, len(args)) for i, arg := range args { symbols[i] = arg.(Symbol) }
Dieser Code erstellt ein neues Segment von Symbolwerten und Symbolen und iteriert über das args-Slice, wobei jedes Element in a konvertiert wird Symbol, das eine Typzusicherung verwendet. Durch diese manuelle Konvertierung wird sichergestellt, dass jedes Element im resultierenden Slice dem gewünschten Typ entspricht und die gewünschte Funktionalität bereitstellt, ohne dass ungültige Typzusicherungen erforderlich sind.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3