Heim >Backend-Entwicklung >Golang >ENUMs in Go beherrschen

ENUMs in Go beherrschen

Patricia Arquette
Patricia ArquetteOriginal
2024-11-27 07:09:15351Durchsuche

Mastering ENUMs in Go

Oft stoßen wir innerhalb der Systeme, die wir entwickeln, auf konstante Werte. Ein Beispiel für diese Werte könnte die Darstellung eines Registrierungsstatus sein. Ziehen Sie in diesem Fall einen Status in Betracht, der mehr Variationen als aktiv und inaktiv umfasst.

Wenn diese Status als Zeichenfolgen definiert sind, kann ihre Validierung im System zu großen Problemen führen. Darüber hinaus könnte dieser Ansatz die Binärdatei „aufblähen“, da jede Validierung zwei Zeichenfolgen umfassen würde (den erwarteten Wert und den zu validierenden Wert).

Um diese Probleme zu vermeiden, können wir den bekannten Enum-Typ verwenden. Wenn Sie mit diesem Typ nicht vertraut sind, handelt es sich im Wesentlichen um einen Typ mit fester Größe oder begrenzter Größe.

Um es klarer zu machen, tauchen wir in einen Code ein. Der zuvor vorgestellten Idee folgend, erstellen wir einen Enum-Typ zur Validierung des Registrierungsstatus.

Definieren eines neuen Typs

Das Erstellen einer Aufzählung basierend auf den Standardtypen von Go kann problematisch sein. Lass es mich erklären. Stellen Sie sich vor, wir definieren unseren Status als uint8-Typ. Angenommen, unser System verfügt auch über eine weitere Aufzählung vom Typ uint8 für das Genre.

Stellen Sie sich nun vor, dass der Wert 1 sowohl den Status „Ausstehend“ als auch das Genre der Country-Musik darstellt. Was passiert, wenn die Validierung „Pending == Country“ durchgeführt wird? Genau, es wird true zurückgeben.

Um dies zu verhindern, erstellen wir einen neuen Typ speziell für den Bearbeitungsstatus. Dieser Typ basiert auf uint8, aber da es sich um einen eindeutigen Typ handelt, wird die zuvor erwähnte Validierung nicht „true“ zurückgeben.

type Status uint8

Erstellen der ENUM

Nachdem wir einen neuen Typ definiert haben, erstellen wir die Konstanten und ihre entsprechenden Werte für die Registrierungsstatus.

const (
  Created Status = 0
  Pending = 1
  Approved = 2
  Rejected = 3
)

Obwohl es grundsätzlich nichts Falsches ist, Werte wie oben zuzuweisen, gibt es einen einfacheren Weg. Anstatt jeder Konstante einen Wert zuzuweisen, können wir das iota-Schlüsselwort verwenden. Dieses Schlüsselwort veranlasst Go, der ersten Konstante 0 zuzuweisen und den Wert dann sequentiell für jede nachfolgende Konstante um 1 zu erhöhen.

const (
  Created Status = iota
  Pending
  Approved
  Rejected
)

Drucken der ENUM

Da die Aufzählung derzeit implementiert ist, würde beim Drucken der Konstante „Created“ der Wert 0 angezeigt. Für eine bessere Lesbarkeit ist es jedoch hilfreicher, das Wort „Created“ anstelle des Werts 0 anzuzeigen.

Die Lösung ist sehr einfach. Implementieren Sie einfach die magische String()-Methode.

func (s Status) String() string {
  switch s {
    case Created:
      return "created"
    case Pending:
      return "pending"
    case Approved:
      return "approved"
    case Rejected:
      return "rejected"
   }

   return "unknown"
}

Abschluss

Um dies zu testen, drucken wir einfach den Status „Ausstehend“ aus.

package main

import "fmt"

type Status uint8

const (
  Created Status = iota
  Pending
  Approved
  Rejected
)

func (s Status) String() string {
  switch s {
    case Created:
      return "created"
    case Pending:
      return "pending"
    case Approved:
      return "approved"
    case Rejected:
      return "rejected"
  }

  return "unknown"
}

func main() {
  fmt.Println(Pending)
}

Beim Ausführen des Befehls „go run“ sollte die Ausgabe „Ausstehend“ auf dem Terminal erfolgen.

Das ist es! Ich hoffe, das war hilfreich.

Bis zum nächsten Mal!

Das obige ist der detaillierte Inhalt vonENUMs in Go beherrschen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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