在下面的代码中:

package main

func main() {

    array := [4]int{1, 2, 3, 4}
    length := len(array)
    for i:=0,j:=length-1; i < length/2; i++, j--{
        array[i], array[j] = array[j], array[i] 
    }
    fmt.Println(array)
}

for循环中的初始化陈述,i:=0,j:=length-1给出错误:expected boolean or range expression, found assignment

for循环中的initit陈述是否允许逗号分隔的分配?

推荐答案

for statement的初始化陈述是一个简单的陈述:

ForClause = [ InitStmt ] ";" [ Condition ] ";" [ PostStmt ] .
InitStmt = SimpleStmt .
PostStmt = SimpleStmt .

其中simple statement是:

SimpleStmt = EmptyStmt | ExpressionStmt | SendStmt | IncDecStmt | Assignment | ShortVarDecl .

您对short variable declaration个感兴趣,即:

ShortVarDecl = IdentifierList ":=" ExpressionList .

短变量声明允许多个标识符.

而且Post声明也是一个简单的声明,可以用assigment来增加多个变量,即:

Assignment = ExpressionList assign_op ExpressionList .

assign_op = [ add_op | mul_op ] "=" .

请注意,increment and decrement个操作是陈述,而不是运算符,因此您不能在单个Post陈述中使用多个操作,您必须使用像i, j = i+1, j-1这样的二元组分配.

总而言之,这就是您可以做到的方法:

for i, j := 0, length-1; i < length/2; i, j = i+1, j-1 {
    array[i], array[j] = array[j], array[i]
}

Go相关问答推荐

如何在Deliverq中高效地传达客户依赖关系?

使用恶意软件 scanner (ClamAV)时的Google云存储桶上传文件验证

追加一个字节数组的分配比2个字节数组的分配要少得多

从Kafka到Clickhouse的实时消费数据

由于索引器压缩比限制,扫描包含golang包的图像时,伪影XRAY失败

验证访问令牌(密钥罩)

Go Colly-访问for循环中的URL

在nixos上找不到XInput2.h头文件的包

Go:拆分一个由逗号分隔的键/值对字符串,并在给定的键/价值对中嵌入可能的逗号

Go 中带有回调的 MiniDumpWriteDump

为什么标准库中的 IsSorted 会反向迭代切片?

使用golang sqlc中的引用参数

如何判断范围内的字段?

枚举的 Golang 验证器自定义验证规则

具有两个或多个模型的 GORM 查询

Go 中的 HTTP 请求验证中间件

如果服务器在客户端的 gRPC 中不可用,则等待的方法

如何通过组合来自不同包的接口来创建接口?

(如何)我可以基于接口抽象地实现Stringer吗?

即使没有竞争条件也没有得到任何输出