zhcn 编程语言 Golang Golang 介绍 非公開: Go语言作用域关键字:循环迭代切片

Go语言作用域关键字:循环迭代切片

在之前的研究中,我们了解到切片实际上是同一类型的多个元素的连续集合。切片是一个集合,因此您可以迭代其中的元素。 Go 语言有一个特殊的关键字范围,您可以使用关键字 for 来迭代切片中的每个元素,如下所示:

 // 整数のスライスを作成して値を設定する
slice := []int{10, 20, 30, 40}
// 各要素を反復し、その値を表示する
for index, value := range slice {
    fmt.Printf("インデックス: %d 値: %d\n", index, value)
} 

第四行中的索引和值分别用于接收 range 关键字返回的切片中每个元素的索引和值。这里的索引和值不是固定的,读者还可以定义其他名称。

for的详细用法将在下一章《Go语言中的流程控制》中详细讲解。

上述代码的输出是:

Index: 0 Value: 10
Index: 1 Value: 20
Index: 2 Value: 30
Index: 3 Value: 40

迭代切片时,range 关键字返回两个值,如下图所示。第一个值是当前正在迭代的索引位置,第二个值是与该位置对应的元素值的副本。

需要强调的是,range 并不直接返回每个元素的引用,而是每个元素的副本,如下所示。

【示例1】range提供了每个元素的副本

 // 整数のスライスを作成して値を割り当てる
slice := []int{10, 20, 30, 40}
// 各要素を繰り返して、値とアドレスを表示する
for index, value := range slice {
    fmt.Printf("値: %d 値のアドレス: %X 要素のアドレス: %X\n", value, &value, &slice[index])
} 

输出是:

Value: 10 Value-Addr: 10500168 ElemAddr: 1052E100
Value: 20 Value-Addr: 10500168 ElemAddr: 1052E104
Value: 30 Value-Addr: 10500168 ElemAddr: 1052E108
Value: 40 Value-Addr: 10500168 ElemAddr: 1052E10C

迭代返回的变量是迭代过程中按照切片顺序分配的新变量,因此值的地址始终相同。要获取每个元素的地址,请使用切片变量和索引值(例如上面代码中的 &slice[index])。

如果不需要索引值,也可以使用下划线_忽略该值。这是代码:

【示例2】使用空白标识符(下划线)忽略索引值

 // 整数のスライスを作成し、値を割り当てる
slice := []int{10, 20, 30, 40}
// 各要素を反復処理し、その値を表示する
for _, value := range slice {
    fmt.Printf("Value: %d\n", value)
} 

输出是:

Value: 10
Value: 20
Value: 30
Value: 40

关键字范围始终从切片标头迭代。如果您想更好地控制迭代,可以使用传统的 for 循环。代码如下所示。

[示例 3] 使用传统的 for 循环迭代切片

 // 整数のスライスを作成し、値を割り当てる
slice := []int{10, 20, 30, 40}

// 3番目の要素から要素を反復処理する
for index := 2; index < len(slice); index++ {
    fmt.Printf("Index: %d Value: %d\n", index, slice[index])
} 

输出是:

Index: 2 Value: 30
Index: 3 Value: 40

在上一节中,您了解了两个可用于处理数组、切片和通道的特殊内置函数:len() 和 cap()。对于切片,函数 len() 可以返回长度。函数 cap() 可以返回切片的容量。在上面的例子中,函数 len() 用于控制循环迭代的次数。

当然,range关键字不仅可以用来遍历切片,还可以用来遍历数组、字符串、映射、通道等。这将在稍后的研究中详细讨论。

《Go语言范围关键字:循环迭代切片》通俗易懂的讲解!您必须观看的 2 个最佳视频

【たった1時間で学べる】Go言語のプログラミング初心者向けの超入門講座【文字書き起こし、ソースコードも完全無料!】
https://www.youtube.com/watch?v=kPXfMFJ0oIE&pp=ygVFIEdvIOiogOiqnuevhOWbsuOBruOCreODvOODr-ODvOODiTog44Or44O844OX5Y-N5b6p44K544Op44Kk44K5JmhsPUpB
For ループ – Golang を学ぶ #6
https://www.youtube.com/watch?v=_WCE_VA-IEM&pp=ugMICgJqYRABGAHKBUUgR28g6KiA6Kqe56-E5Zuy44Gu44Kt44O844Ov44O844OJOiDjg6vjg7zjg5flj43lvqnjgrnjg6njgqTjgrkmaGw9SkE %3D
在之前的研究中,我们了解到切片实际上是同一类型的多个元素的连续集合。切片是一个集合,因此您可以迭代其中的元素。 Go 语言有一个特殊的关键字范围,您可以使用关键字 for 来迭代切片中的每个元素,如下所示:

 // 整数のスライスを作成して値を設定する
slice := []int{10, 20, 30, 40}
// 各要素を反復し、その値を表示する
for index, value := range slice {
    fmt.Printf("インデックス: %d 値: %d\n", index, value)
} 

第四行中的索引和值分别用于接收 range 关键字返回的切片中每个元素的索引和值。这里的索引和值不是固定的,读者还可以定义其他名称。

for的详细用法将在下一章《Go语言中的流程控制》中详细讲解。

上述代码的输出是:

Index: 0 Value: 10
Index: 1 Value: 20
Index: 2 Value: 30
Index: 3 Value: 40

迭代切片时,range 关键字返回两个值,如下图所示。第一个值是当前正在迭代的索引位置,第二个值是与该位置对应的元素值的副本。

需要强调的是,range 并不直接返回每个元素的引用,而是每个元素的副本,如下所示。

【示例1】range提供了每个元素的副本

 // 整数のスライスを作成して値を割り当てる
slice := []int{10, 20, 30, 40}
// 各要素を繰り返して、値とアドレスを表示する
for index, value := range slice {
    fmt.Printf("値: %d 値のアドレス: %X 要素のアドレス: %X\n", value, &value, &slice[index])
} 

输出是:

Value: 10 Value-Addr: 10500168 ElemAddr: 1052E100
Value: 20 Value-Addr: 10500168 ElemAddr: 1052E104
Value: 30 Value-Addr: 10500168 ElemAddr: 1052E108
Value: 40 Value-Addr: 10500168 ElemAddr: 1052E10C

迭代返回的变量是迭代过程中按照切片顺序分配的新变量,因此值的地址始终相同。要获取每个元素的地址,请使用切片变量和索引值(例如上面代码中的 &slice[index])。

如果不需要索引值,也可以使用下划线_忽略该值。这是代码:

【示例2】使用空白标识符(下划线)忽略索引值

 // 整数のスライスを作成し、値を割り当てる
slice := []int{10, 20, 30, 40}
// 各要素を反復処理し、その値を表示する
for _, value := range slice {
    fmt.Printf("Value: %d\n", value)
} 

输出是:

Value: 10
Value: 20
Value: 30
Value: 40

关键字范围始终从切片标头迭代。如果您想更好地控制迭代,可以使用传统的 for 循环。代码如下所示。

[示例 3] 使用传统的 for 循环迭代切片

 // 整数のスライスを作成し、値を割り当てる
slice := []int{10, 20, 30, 40}

// 3番目の要素から要素を反復処理する
for index := 2; index < len(slice); index++ {
    fmt.Printf("Index: %d Value: %d\n", index, slice[index])
} 

输出是:

Index: 2 Value: 30
Index: 3 Value: 40

在上一节中,您了解了两个可用于处理数组、切片和通道的特殊内置函数:len() 和 cap()。对于切片,函数 len() 可以返回长度。函数 cap() 可以返回切片的容量。在上面的例子中,函数 len() 用于控制循环迭代的次数。

当然,range关键字不仅可以用来遍历切片,还可以用来遍历数组、字符串、映射、通道等。这将在稍后的研究中详细讨论。

《Go语言范围关键字:循环迭代切片》通俗易懂的讲解!您必须观看的 2 个最佳视频

【たった1時間で学べる】Go言語のプログラミング初心者向けの超入門講座【文字書き起こし、ソースコードも完全無料!】
https://www.youtube.com/watch?v=kPXfMFJ0oIE&pp=ygVFIEdvIOiogOiqnuevhOWbsuOBruOCreODvOODr-ODvOODiTog44Or44O844OX5Y-N5b6p44K544Op44Kk44K5JmhsPUpB
For ループ – Golang を学ぶ #6
https://www.youtube.com/watch?v=_WCE_VA-IEM&pp=ugMICgJqYRABGAHKBUUgR28g6KiA6Kqe56-E5Zuy44Gu44Kt44O844Ov44O844OJOiDjg6vjg7zjg5flj43lvqnjgrnjg6njgqTjgrkmaGw9SkE %3D