Heim > Backend-Entwicklung > Golang > Wie kann ich in Go ein Stück Strings sicher in ein Stück benutzerdefinierter Typen konvertieren?

Wie kann ich in Go ein Stück Strings sicher in ein Stück benutzerdefinierter Typen konvertieren?

Barbara Streisand
Freigeben: 2024-12-09 15:18:15
Original
821 Leute haben es durchsucht

How Can I Safely Convert a Slice of Strings to a Slice of Custom Types in Go?

Typkonvertierung: Strings in benutzerdefinierte Typen

In Go kann die Konvertierung eines Teils von Zeichenfolgen in ein Teil von benutzerdefinierten Typen eine Herausforderung sein. Betrachten Sie das folgende Beispiel:

package main

import "fmt"

type Card string
type Hand []Card

func NewHand(cards []Card) Hand {
    hand := Hand(cards)
    return hand
}

func main() {
    value := []string{"a", "b", "c"}
    firstHand := NewHand(value)
    fmt.Println(firstHand)
}
Nach dem Login kopieren

Dieser Code führt zu einem Compilerfehler:

cannot use value (type []string) as type []Card in argument to NewHand
Nach dem Login kopieren

Der Grund für diesen Fehler liegt in der Entscheidung des Spezifikationsdesigns, versehentliche Konvertierungen zwischen nicht verwandten Typen zu verhindern die zufälligerweise die gleiche Struktur haben. Unter bestimmten Umständen kann es jedoch erforderlich sein, zwischen solchen Slices zu konvertieren.

Unsichere Konvertierung

Obwohl es technisch nicht unmöglich ist, zwischen Slices mit identischen zugrunde liegenden Typen zu konvertieren , besteht der sichere Ansatz darin, das Slice zu kopieren. Dennoch ist es möglich, eine direkte Konvertierung (ohne Kopieren) mit dem unsicheren Paket durchzuführen:

value := []string{"a", "b", "c"}
// convert &value (type *[]string) to *[]Card via unsafe.Pointer, then deref
cards := *(*[]Card)(unsafe.Pointer(&value))
firstHand := NewHand(cards)
Nach dem Login kopieren

Vorsicht

Die Verwendung des unsicheren Pakets erfordert äußerste Vorsicht ermöglicht es Programmen, das Typsystem zu umgehen und auf beliebigen Speicher zuzugreifen. Wenn die Konvertierung von entscheidender Bedeutung ist, empfiehlt es sich, andere Optionen in Betracht zu ziehen, z. B. die Definition eines neuen Typs, der sowohl den String- als auch den Kartentyp kapselt, und die Durchführung einer sicheren Konvertierung innerhalb dieser Struktur.

Das obige ist der detaillierte Inhalt vonWie kann ich in Go ein Stück Strings sicher in ein Stück benutzerdefinierter Typen konvertieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage