究竟什么是“范围”?它是一个函数吗?

ara*_*nah 2 go

循环数组和切片的首选方法之一是range像这样使用

arr = []int{1, 2}

for index, item := range arr {
  continue
}
Run Code Online (Sandbox Code Playgroud)

我知道它是如何range工作的,我已经使用过很多次了。但我仍然不确定幕后的情况是什么。它是 的函数和修改吗range(arr)?它返回 2 个变量的事实让我这么想,但我需要确认。

其背后的实现原理是什么?

The*_*ool 6

根据规范,范围是关键字之一。

The following keywords are reserved and may not be used as identifiers.

break        default      func         interface    select
case         defer        go           map          struct
chan         else         goto         package      switch
const        fallthrough  if           range        type
continue     for          import       return       var
Run Code Online (Sandbox Code Playgroud)

对于带有范围子句的语句

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

RangeClause = [ ExpressionList "=" | IdentifierList ":=" ] "range" Expression .
Run Code Online (Sandbox Code Playgroud)