【问题标题】:Multiple initialization in golanggolang中的多重初始化
【发布时间】:2018-07-17 20:25:02
【问题描述】:

下面是代码sn-p

package main

import "fmt"

var text []int64

func main() {

    for i, j := 0, 1; i < 4; i, j = i+1, j+1 {
        fmt.Println("Value of i, j:", i, j)
        fmt.Println(text[j])
    }

}

它显示以下错误;

Value of i, j: 0 1
panic: runtime error: index out of range

goroutine 1 [running]:
main.main()
    /home/cg/root/6063741/main.go:13 +0x268
exit status 2

我想知道如何解决这个错误。

谢谢

这是我要转换的 java 代码;

long    text[]; 
int     num        = 1

text = new long[num];

for (int i=0; i<num; i++)
        {
            text[i] = 0;
        // do something
}
if (num > 1) {
            for (int i=0,j=1; i<numSubs; i++,j++) {
        // do something
        System.out.Println(text[i]
)
       }
}

【问题讨论】:

  • text 是一个 nil 切片,因此它不包含任何数据。您希望看到什么?
  • 我实际上是在尝试将以下内容转换为 go..
  • 文本=新长[文本]; Var num = 4 for (int i=0; i 1 { //以上代码 } }
  • text = new long[text]; wot?
  • @Priyanka:不要将代码放在 cmets 中。使用相关信息更新您的问题。

标签: loops for-loop go


【解决方案1】:

The Go Programming Language Specification

Index expressions

对于切片aa[x] 表示切片a 中由x 索引的元素。 如果0 &lt;= x &lt; len(a),则索引x 在范围内,否则超出范围 范围。


变量ij 是切片text 的索引。它们必须始终在范围内:0 &lt;= i &lt; len(text)0 &lt;= j &lt; len(text)。由于i &lt; j,简化为0 &lt;= ij &lt; len(text)

对于您的 Go 示例,

package main

import "fmt"

var text []int64

func main() {
    for i, j := 0, 1; i < 4 && j < len(text); i, j = i+1, j+1 {
        fmt.Println("Value of i, j:", i, j)
        fmt.Println(text[j])
    }
}

游乐场:https://play.golang.org/p/02r_VY9VMa5

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-11
    • 2017-04-26
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 2020-07-30
    • 1970-01-01
    相关资源
    最近更新 更多