For loop for循环中的golang范围是否保证只评估一次?

For loop for循环中的golang范围是否保证只评估一次?,for-loop,go,evaluation,For Loop,Go,Evaluation,在我正在开发的软件中,我看到许多循环如下所示: for _, i := range strings.Split(s, ",") { ... } 我想确保该范围只计算一次,因为拆分字符串总是代价高昂的 在golang的文档中有关于这一点的规定吗? 在开始循环之前,范围表达式x将被计算一次,但有一个例外:如果最多存在一个迭代变量,并且len(x)是常量,则不计算范围表达式 有关Go规则文档,请阅读。特别是:\ui算作1个或2个迭代变量吗?该文档中的上一段似乎暗示了\ui将算作2个迭代变量,这是有意

在我正在开发的软件中,我看到许多循环如下所示:

for _, i := range strings.Split(s, ",") { ... }
我想确保该范围只计算一次,因为拆分字符串总是代价高昂的

在golang的文档中有关于这一点的规定吗?

在开始循环之前,范围表达式x将被计算一次,但有一个例外:如果最多存在一个迭代变量,并且len(x)是常量,则不计算范围表达式


有关Go规则文档,请阅读。特别是:
\ui
算作1个或2个迭代变量吗?该文档中的上一段似乎暗示了
\ui
将算作2个迭代变量,这是有意义的,因为它只会在值不重要时避免计算,而只需要返回索引的长度:“与赋值一样,如果操作数出现在左边[…];它们表示迭代变量。如果范围表达式是通道,则最多允许一个迭代变量,否则最多可能有两个。如果最后一个迭代变量是空白标识符,则范围子句等同于没有该标识符的相同子句。