go

时间:2015-06-20 15:38:01

标签: go

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

package main

import (
    "fmt"
    "os"
)

func main() {
    for i, env := range os.Environ() {
        fmt.Println(i, env)
    }
}

这里,os.Environ()应返回array of strings([] string),以循环它。我需要使用范围关键字&也用于循环。问题是:

  1. 为什么两者兼而有之?范围要求?是否可以使用for循环,因为[]string已经是一个数组&我们可以迭代数组吗?
  2. 在上面的代码中range做了什么? for循环有什么作用?
  3. 很抱歉,如果这个问题太愚蠢,我刚开始使用Go

1 个答案:

答案 0 :(得分:5)

Range Clauses中所述:

  

range子句提供了一种迭代数组,切片,字符串,映射或通道的方法。

如果您要迭代[]string,则需要range

For statement并不总是使用范围。

ForStmt = "for" [ Condition | ForClause | RangeClause ] Block .

你有:

  
      
  • 最简单的形式是" for"只要布尔条件的计算结果为真

  • ,语句就会指定重复执行一个块   
  • A" for"带有ForClause的语句也受其条件控制,但另外它可以指定init和post语句,例如赋值,递增或递减语句

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

  •