Heim >Backend-Entwicklung >Golang >Wie kann ich in Go sowohl Zeichenfolgen- als auch Ganzzahlwerte in einem Strukturfeld speichern?
Typkonvertierung und Schnittstellen in Strukturfeldern
Frage:
In einem Go-Programm Mit einer Struktur wird ein benutzerdefinierter Datentyp definiert, der mehrere Felder unterschiedlichen Typs bündelt. Was aber, wenn Sie ein Feld innerhalb einer Struktur wünschen, das sowohl Zeichenfolgen- als auch Ganzzahlwerte speichern kann?
Antwort:
Das Typsystem von Go unterstützt keine Summentypen, die Erlauben Sie einem einzelnen Feld, Werte mehrerer Typen zu speichern. Es gibt jedoch eine Problemumgehung mithilfe von Schnittstellen. Eine Schnittstelle definiert eine Reihe von Methoden, und jeder Typ, der diese Methoden implementiert, kann als diese Schnittstelle verwendet werden.
Um diese Lösung zu implementieren, betrachten Sie den folgenden Codeausschnitt:
type Input interface { ToString() string ToInteger() int } type TestCase struct { Input Input IsValid bool }
In diesem Beispiel haben wir die Eingabeschnittstelle mit zwei Methoden definiert, ToString() und ToInteger(), die zum Konvertieren des Eingabewerts in einen String oder eine Ganzzahl verwendet werden. Die TestCase-Struktur verfügt jetzt über ein Eingabefeld, das jeden Typ akzeptiert, der die Eingabeschnittstelle implementiert.
Um diese Lösung zu verwenden, können Sie benutzerdefinierte Typen definieren, die die Eingabeschnittstelle implementieren:
type StringInput string func (s StringInput) ToString() string { return string(s) } func (s StringInput) ToInteger() int { return 0 // Error handling omitted for brevity } type IntegerInput int func (i IntegerInput) ToString() string { return strconv.Itoa(int(i)) } func (i IntegerInput) ToInteger() int { return int(i) }
Mit Mit diesen benutzerdefinierten Typen können Sie einen Testfall erstellen und dem Eingabefeld Werte zuweisen:
var testCase = TestCase{Input: StringInput("Hello"), IsValid: true} fmt.Println(testCase.Input.ToString()) // Prints "Hello" fmt.Println(testCase.Input.ToInteger()) // Throws error
Während dieser Ansatz es Ihnen ermöglicht, sowohl Zeichenfolgen- als auch Ganzzahlwerte im zu speichern Wenn Sie dasselbe Feld verwenden, müssen benutzerdefinierte Typen und Konvertierungsmethoden implementiert werden, die möglicherweise nicht für alle Fälle geeignet sind.
Das obige ist der detaillierte Inhalt vonWie kann ich in Go sowohl Zeichenfolgen- als auch Ganzzahlwerte in einem Strukturfeld speichern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!