Konstanten in der Go-Sprache

Eine Konstante ist ein Bezeichner für einen einfachen Wert, eine Größe, die während der Programmlaufzeit nicht geändert wird. Die Datentypen in Konstanten können nur boolesche, numerische (Ganzzahl, Gleitkommazahl und komplexe Zahl) und String-Typen sein.

Wortdefinitionen: constJaconstantAbkürzung für (Konstante), die einen unveränderlichen Wert in einem Programm darstellt.


Grundlegende Syntax und Parameter

Das Definitionsformat für Konstanten:

const identifier [type] = value

Syntaxbeschreibung

  • BezeichnerKonstantenname, der den Namensregeln für Go-Bezeichner folgt (Buchstaben, Ziffern, Unterstriche und darf nicht mit einer Ziffer beginnen).
  • type(Optional): Typname; wenn weggelassen, wird er automatisch vom Compiler abgeleitet.
  • Wert: der Wert der Konstante.

Definitionsmethoden

  • Explizite Typdefinition:const b string = "abc"
  • Implizite Typdefinition:const b = "abc"
  • Sammeldefinition:const c_name1, c_name2 = value1, value2

Beispiel

Beispiel 1: Grundlegende Konstantendefinition

Beispiel

package main

import "fmt"

func main() {
   const LENGTH int = 10
   const WIDTH int = 5
   var area int
   const a, b, c = 1, false, "str" // Mehrfachzuweisung

   area = LENGTH * WIDTH
   fmt.Printf("Area is: %d", area)
   println()
   println(a, b, c)
}

Erwartete Ausgabe:

面积为 : 50
1 false str

Codeanalyse:

  1. const LENGTH int = 10Definiert eine ganzzahlige Konstante LENGTH mit dem Wert 10.
  2. const WIDTH int = 5Definiert eine ganzzahlige Konstante WIDTH mit dem Wert 5.
  3. const a, b, c = 1, false, "str"Verwendet Mehrfachzuweisung, um mehrere Konstanten unterschiedlichen Typs gleichzeitig zu definieren.
  4. area = LENGTH * WIDTHBerechnet die Fläche und weist sie der Variablen area zu.

Konstantengruppen und Enums

Go hat kein enum-Schlüsselwort; es verwendet normalerweise Konstantengruppen, um enum-ähnliches Verhalten zu erreichen:

Beispiel

package main

import "fmt"

// Geschlechts-Enum definieren
const (
    Unknown = 0
    Female  = 1
    Male    = 2
)

func main() {
    fmt.Printf("Unknown=%d, Female=%d, Male=%d\n", Unknown, Female, Male)
}

Erwartete Ausgabe:

未知=0, 女性=1, 男性=2

Codeanalyse:

  • Mit einer Konstantengruppe können Sie eine Reihe zusammengehöriger konstanter Werte definieren.
  • Die Zahlen 0, 1 und 2 stehen jeweils für unbekanntes Geschlecht, weiblich und männlich.

Anwendung von eingebauten Funktionen in Konstanten

In konstanten Ausdrücken können Sielen()、cap()、unsafe.Sizeof()und andere eingebaute Funktionen, um den Wert des Ausdrucks zu berechnen.

Hinweis:In konstanten Ausdrücken müssen Funktionen eingebaute Funktionen sein.

Beispiel

package main

import (
    "fmt"
    "unsafe"
)

const (
    a = "abc"
    b = len(a)
    c = unsafe.Sizeof(a)
)

func main() {
    fmt.Printf("a=%s, b=%d, c=%d\n", a, b, c)
}

Erwartete Ausgabe:

a=abc, b=3, c=16

Codeanalyse:

  • a = "abc": String-Konstante.
  • b = len(a): Verwende len(), um die Länge der Zeichenkette zu erhalten; das Ergebnis ist 3.
  • c = unsafe.Sizeof(a): Verwende unsafe.Sizeof(), um den Speicherverbrauch der Variable zu ermitteln; das Ergebnis ist 16 Bytes (die String-Struktur belegt 16 Bytes auf einem 64-Bit-System).

iota-Konstantenzähler

iotaIst eine spezielle Konstante in Go, auch bekannt als Konstantenzähler. Sie kann innerhalb eines const-Deklarationsblocks automatisch eine ansteigende Folge von Werten erzeugen.

Wichtige Features:

  • iotaInconstDas Schlüsselwort wird beim Auftreten auf 0 zurückgesetzt.
  • In const erhöht jede neue Zeile einer Konstantendeklaration den iota-Zähler um 1.
  • Es kann als Zeilenindex innerhalb des const-Anweisungsblocks verstanden werden (beginnend bei 0).

Beispiel 1: Grundlegende iota-Verwendung

Beispiel

package main

import "fmt"

// iota beginnt bei 0, erhöht sich pro Zeile um 1
const (
    a = iota   // 0
    b          // 1 (weggelassener Wert, standardmäßig der iota-Wert der vorherigen Zeile)
    c          // 2
)

func main() {
    fmt.Printf("a=%d, b=%d, c=%d\n", a, b, c)
}

Erwartete Ausgabe:

a=0, b=1, c=2

Codeanalyse:

  • Wenn der Konstantenwert weggelassen wird, wird standardmäßig der iota-Wert aus der vorherigen Zeile verwendet.
  • Daher gilt b=1, c=2.

Beispiel 2: Detaillierte Verwendung von iota

Beispiel

package main

import "fmt"

func main() {
    const (
        a = iota   // 0
        b          // 1
        c          // 2
        d = "ha"   // Unabhängiger Wert, iota += 1
        e          // "ha",iota += 1
        f = 100    // Unabhängiger Wert, iota += 1
        g          // 100,iota += 1
        h = iota   // 7, unter Verwendung des iota-Werts fortfahren
        i          // 8
    )
    fmt.Printf("a=%d, b=%d, c=%d, d=%s, e=%s, f=%d, g=%d, h=%d, i=%d\n", a, b, c, d, e, f, g, h, i)
}

Erwartete Ausgabe:

a=0, b=1, c=2, d=ha, e=ha, f=100, g=100, h=7, i=8

Codeanalyse:

  • Wenn ein Wert explizit zugewiesen wird, wird dieser Wert verwendet, aber iota wird trotzdem erhöht.
  • Wenn die Zuweisung weggelassen wird, wird der Wert aus der vorherigen Zeile verwendet.
  • Inh = iotaDann wird mit dem aktuellen Wert von iota (7) fortgefahren.

Beispiel 3: iota und Bit-Shift-Operationen

Beispiel

package main

import "fmt"

const (
    i = 1 << iota  // 1 << 0 = 1
    j = 3 << iota  // 3 << 1 = 6
    k              // 3 << 2 = 12
    l              // 3 << 3 = 24
)

func main() {
    fmt.Printf("i=%d, j=%d, k=%d, l=%d\n", i, j, k, l)
}

Erwartete Ausgabe:

i=1, j=6, k=12, l=24

Codeanalyse:

  • <<ist der Linksverschiebungsoperator,x << nÄquivalent zux * 2^n。
  • i = 1 << 0 = 1: 1 um 0 Bits nach links verschoben, das Ergebnis ist 1.
  • j = 3 << 1 = 6: 3 um 1 Bit nach links verschoben, aus der Binärzahl 11 wird 110, was 6 ist.
  • k = 3 << 2 = 12: 3 um 2 Bits nach links verschoben, aus der Binärzahl 11 wird 1100, was 12 ist.
  • l = 3 << 3 = 24: 3 um 3 Bits nach links verschoben, aus der Binärzahl 11 wird 11000, was 24 ist.

Zusätzliche Hinweise

  • 1 << n = 1 * 2^n
  • 3 << n = 3 * 2^n
Weitere Erweiterungen