Heim > Backend-Entwicklung > Golang > Wie kann ich in Go sowohl Zeichenfolgen- als auch Ganzzahlwerte in einem Strukturfeld speichern?

Wie kann ich in Go sowohl Zeichenfolgen- als auch Ganzzahlwerte in einem Strukturfeld speichern?

DDD
Freigeben: 2024-11-28 00:14:11
Original
938 Leute haben es durchsucht

How can I store both string and integer values in a struct field in Go?

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

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

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

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!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage