Heim >Backend-Entwicklung >Golang >So verwenden Sie den Bereich zum Iterieren in Golang
range ist ein Schlüsselwort in der Go-Sprache, das zum Iterieren von Arrays, Slices, Kanälen und anderen Sammlungstypen verwendet wird. Durch die Verwendung der Range-Schlüsselwortsyntax kann der Code prägnanter und klarer gestaltet werden. Wenn Sie den Bereich zum Iterieren verwenden, müssen Sie einige Details und Unterschiede in verschiedenen Szenarien beachten.
Beim Iterieren über Arrays und Slices gibt der Bereich zwei Werte zurück: den Index und den Elementwert. Mit dem Platzhalter _ kann einer der Werte weggelassen werden.
Beispiel:
arr := [5]int{1, 2, 3, 4, 5} for index, value := range arr { fmt.Printf("index: %d, value: %d\n", index, value) } sli := []string{"hello", "world", "golang"} for i, v := range sli { fmt.Printf("i: %d, v: %s\n", i, v) }
Wenn Sie beim Durchlaufen eines Arrays oder Slice nur den Index- oder Elementwert benötigen, können Sie den Platzhalter _ verwenden, um die entsprechende Variable zu ignorieren. Zum Beispiel:
arr := [5]int{1, 2, 3, 4, 5} for index, _ := range arr { fmt.Printf("index: %d\n", index) } sli := []string{"hello", "world", "golang"} for i := range sli { fmt.Printf("i: %d\n", i) }
Beim Iterieren über Karte gibt der Bereich zwei Werte zurück: Schlüssel und Wert. Der Unterschied zu einem Array besteht darin, dass Schlüssel-Wert-Paare anstelle von Indizes und Elementwerten zurückgegeben werden.
Beispiel:
m := map[string]int{"a":1, "b":2, "c":3} for key, value := range m { fmt.Printf("key: %s, value: %d\n", key, value) }
Kann auch beim Iterieren von Map_ verwendet werden. Ignorieren Sie einen der Werte:
m := map[string]int{"a":1, "b":2, "c":3} for k := range m { fmt.Println("key:", k) }
str := "hello,世界!" for index, ch := range str { fmt.Printf("index: %d, char: %c\n", index, ch) }
ch := make(chan int, 10) go func() { for i := 0; i < 10; i++ { ch <- i } close(ch) }() for val := range ch { fmt.Println("value:", val) }Bei der Verwendung von Kanälen muss besonders darauf geachtet werden, dass das Programm einfriert, wenn der Wert im Kanal nicht gelesen wird. Sie können dieses Problem lösen, indem Sie gepufferte Kanäle oder SELECT-Anweisungen verwenden. Beispiel für einen Pufferkanal:
ch := make(chan int, 10) go func() { for i := 0; i < 10; i++ { ch <- i } close(ch) }() for { select { case val, ok := <-ch: if !ok { return } fmt.Println("value:", val) default: // 通道中没有值可读 } }
// 错误示例 sli := []int{1, 2, 3} for _, v := range sli { go func() { fmt.Println(v) // 输出结果都是 3 }() } // 正确示例 sli := []int{1, 2, 3} for _, v := range sli { val := v // 复制变量 go func() { fmt.Println(val) }() }Kurz gesagt, Range ist ein sehr praktisches Schlüsselwort in der Go-Sprache, das uns dabei helfen kann, Elemente in einer Sammlung zu iterieren. Wenn Sie den Bereich verwenden, müssen Sie beim Iterieren verschiedener Arten von Sammlungen auf die unterschiedlichen Rückgabewerte sowie auf das Problem der Wiederverwendung von Schleifenvariablen achten.
Das obige ist der detaillierte Inhalt vonSo verwenden Sie den Bereich zum Iterieren in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!