2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Wir haben in unserem vorherigen Artikel vorgestellt, dass dies nicht geübt werden sollte.continue
Anweisung zur Berechnung der Summe gerader Zahlen innerhalb von 100. Während wir Code schreiben,continue
Die Anweisung hilft uns dabei, bestimmte Iterationen zu überspringen, die nicht benötigt werden. In diesem Beispiel werden wir beispielsweise alle ungeraden Zahlen überspringen.
- sum := 0
- for i := 1; i < 100; i++{
- if i & 1 == 0 {
- continue
- }
- sum += i
- }
-
- fmt.Println("the sum is",sum)
Bei der Programmierung müssen wir uns oft mit einer Menge von Elementen desselben Typs befassen, und diese Mengen von Elementen werden durch spezifische Datenstrukturen in der Go-Sprache dargestellt. Heute stelle ich Ihnen verschiedene Sammlungstypen in Go im Detail vor: Array, Slice und Map.
Beginnen wir zunächst mit Arrays. Array ist die grundlegendste Datenstruktur in Go. Es handelt sich um eine Folge fester Länge von Elementen desselben Typs. Sobald ein Array deklariert ist, kann seine Länge nicht mehr geändert werden. Die Deklaration und Initialisierung von Arrays ist sehr einfach.
Beim Deklarieren eines Arrays müssen Sie den Array-Typ und die Array-Länge angeben. So wird ein Array deklariert:
var arrayName [arrayLength]elementType
Deklarieren Sie beispielsweise ein ganzzahliges Array der Länge 5:
var numbers [5]int
Sie können ein Array auf verschiedene Arten initialisieren:
var numbers = [5]int{1, 2, 3, 4, 5}
:=
Kurzes Statement:numbers := [5]int{1, 2, 3, 4, 5}
numbers := [...]int{1, 2, 3, 4, 5}
numbers := [5]int{0: 1, 4: 5}
Sie können über den Index beginnend bei 0 auf Elemente in einem Array zugreifen:
value := numbers[2] // 获取索引为 2 的元素
Sie können verwendenfor
Durchlaufen Sie alle Elemente in einem Array:
- for i, value := range numbers {
- fmt.Printf("Index: %d, Value: %dn", i, value)
- }
Sie können das integrierte verwendenlen
Funktion zum Ermitteln der Länge eines Arrays:
length := len(numbers)
Wenn ein Array nicht explizit initialisiert wird, werden seine Elemente automatisch auf den Nullwert ihres Typs gesetzt. Der Nullwert eines Integer-Arrays ist beispielsweise 0:
var numbers [5]int // 所有元素都是 0
Die Go-Sprache unterstützt auch mehrdimensionale Arrays. Das Folgende ist ein Beispiel für die Deklaration und Initialisierung eines 2x3-Integer-Arrays:
- var matrix [2][3]int
- matrix = [2][3]int{{1, 2, 3}, {4, 5, 6}}
Da die Länge des Arrays fest ist, ist dies in manchen Fällen möglicherweise nicht sehr flexibel. Wenn Sie eine Sammlung variabler Länge benötigen, können Sie Slices verwenden.
Als nächstes kommt Slice, ein flexiblerer integrierter Typ, der als dynamisches Array betrachtet werden kann. Die Länge des Slice ist variabel und wird basierend auf einem Array erstellt, was mehr Komfort bietet. So deklarieren und initialisieren Sie ein Slice:
- s := make([]int, 3) // 创建一个长度为3的整型切片
- s[0] = 1 // 切片元素赋值
- s[1] = 2
- s[2] = 3
- s = append(s, 4) // 向切片追加元素
Obwohl sowohl Arrays als auch Slices in der Go-Sprache zum Speichern einer Reihe von Elementen desselben Typs verwendet werden, weisen sie erhebliche Unterschiede in der Speicherzuweisung, Größenvariabilität und Verwendung auf. Hier sind die Hauptunterschiede zwischen Arrays und Slices:
[3]int
Und[4]int
sind verschiedene Typen.[]int
Ist der gemeinsame Typ für alle ganzzahligen Slices.make
Funktion oder Slice aus einem Array zur Initialisierung, keine Größe angegeben.Hier sind Beispiele für die Initialisierung von Arrays und Slices:
- // 数组
- var arr [3]int = [3]int{1, 2, 3}
-
- // 切片
- var slice []int = []int{1, 2, 3}
- // 或者使用 make 函数
- slice := make([]int, 3)
append
Die Funktion fügt Elemente hinzu oder erhält Unterabschnitte durch Slicing-Vorgänge.Das zugrunde liegende Array des Slice kann auf dem Heap zugewiesen werden, und die zeitliche Komplexität des Zugriffs auf die Slice-Elemente beträgt ebenfalls O(1), aberappend
Kann zu einer Neuzuweisung des zugrunde liegenden Arrays führen, bei der es sich normalerweise um eine O(n)-Operation handelt.Schauen wir uns zum Schluss noch das Mapping an. Eine Karte ist ein assoziatives Array in Go, das Schlüssel Werten zuordnet. Die Schlüssel der Karte können von jedem Typ sein, der vom Gleichheitsoperator unterstützt wird, z. B. Ganzzahlen, Gleitkommazahlen, Zeichenfolgen, Zeiger, Schnittstellen (sofern die in der Schnittstelle enthaltenen Werte vergleichbar sind), Strukturen und Arrays. Der zugeordnete Wert kann einen beliebigen Typ haben.
Die Syntax zum Deklarieren einer Karte lautet wie folgt:
var mapName map[keyType]valueType
Deklarieren Sie beispielsweise eine Karte mit Schlüsseln als Zeichenfolgen und Werten als Ganzzahlen:
var scores map[string]int
Nachdem Sie die Karte deklariert haben, müssen Sie bestehenmake
Funktion, um es zu initialisieren, damit es verwendet werden kann:
scores = make(map[string]int)
Alternativ können Sie eine kurze Deklaration verwenden und Folgendes initialisieren:
scores := make(map[string]int)
Sie können zum Zeitpunkt der Deklaration auch Literale zur Initialisierung verwenden:
- scores := map[string]int{
- "alice": 90,
- "bob": 85,
- "charlie": 88,
- }
scores["alice"] = 90
value := scores["alice"]
Wenn der Schlüssel nicht vorhanden ist, wird ein Nullwert für diesen Werttyp zurückgegeben.
Mit dem Idiom „comma -ok“ können Sie überprüfen, ob der Schlüssel in der Karte vorhanden ist:
- value, exists := scores["alice"]
- if exists {
- // 键存在
- } else {
- // 键不存在
- }
verwendendelete
Die Funktion kann ein Schlüssel-Wert-Paar aus der Karte entfernen:
delete(scores, "alice")
Wenn der Schlüssel nicht existiert,delete
Die Funktion macht nichts.
verwendenfor
Eine Schleife kann alle Schlüssel-Wert-Paare in der Karte durchlaufen:
- for key, value := range scores {
- fmt.Printf("%s: %dn", key, value)
- }
Der Nullwert der Karte istnil
.einsnil
Eine Karte hat keine zugrunde liegende Datenstruktur und kann keine Elemente hinzufügen.Bevor Sie Elemente zur Karte hinzufügen, müssen Sie diese verwendenmake
Initialisieren Sie es.
Sie können das integrierte verwendenlen
Funktion zum Abrufen der Anzahl der Schlüssel-Wert-Paare in der Karte:
length := len(scores)
Die Schlüssel der Karte können von jedem vergleichbaren Typ sein, z. B. Ganzzahlen, Gleitkommazahlen, Zeichenfolgen, Zeiger, Schnittstellen (sofern die in der Schnittstelle enthaltenen Werte vergleichbar sind), Strukturen, Arrays usw. Slices, Maps und Funktionen können nicht als Map-Schlüssel verwendet werden, da diese Typen keine Gleichheitsvergleiche unterstützen.
In der Go-Sprache sind Arrays, Slices und Maps drei häufig verwendete Datenstrukturen, die jeweils unterschiedliche Eigenschaften und Überlegungen aufweisen. Bei der Verwendung sind folgende Punkte zu beachten:
nil
, muss vor der Verwendung initialisiert werden.nil
,nil
Map kann nicht zum Speichern von Schlüssel-Wert-Paaren verwendet werden und muss vor der Verwendung initialisiert werden.delete
Das Löschen eines nicht vorhandenen Schlüssels erzeugt keinen Fehler, es kann jedoch sicher überprüft werden, ob der Schlüssel vorhanden ist.