go中for循环结构与范围关键字的区别

Cur*_*ind 4 go

考虑以下代码,它只打印所有ENV变量

package main

import (
    "fmt"
    "os"
)

func main() {
    for i, env := range os.Environ() {
        fmt.Println(i, env)
    }
}
Run Code Online (Sandbox Code Playgroud)

这里,os.Environ()应该返回字符串数组([] string),以循环它.我需要使用范围关键字和循环.问题是:

  1. 为什么要求和范围都需要?是否可以使用for循环,因为[]string它已经是一个数组,我们可以迭代数组吗?
  2. 在上面的代码中range做了什么?for循环有什么作用?

对不起,如果这个问题太愚蠢,我只是从Go开始

Von*_*onC 5

Range子句中所述:

范围子句提供了迭代数组,切片,字符串,映射或通道的方法.

如果你想迭代一个[]string,你需要range.

一个For语句并不总是使用范围.

ForStmt = "for" [ Condition | ForClause | RangeClause ] Block .
Run Code Online (Sandbox Code Playgroud)

你有:

  • 在最简单的形式中,for只要布尔条件的计算结果为true ," "语句就会指定重复执行一个块

  • 带有a的"for"语句ForClause也受其条件控制,但另外它可以指定init和post语句,例如赋值,递增或递减语句

  • 带有"range"子句的"for"语句遍历数组,切片,字符串或映射的所有条目,或者在通道上接收的值.对于每个条目,它将迭代值分配给相应的迭代变量(如果存在),然后执行该块.