2017-09-27 46 views
-3

我想每次创建基于10字节切片的新变量,直到达到len(number)。然而,围棋一直给我下面的错误:在分配新变量的同时对数组进行切片

non-name variable_[i] on left side of :=

这是我到目前为止已经试过

for i := 0; i < len(number); i += 10 { 
     variable_[i] := number[i : i+10] 
    } 

我也尝试了追加,它也不能工作。

任何想法如何做到这一点?

数字是一个变量,所以它不是一个常量(它可以改变大小) 所以我不会提前知道我想要循环创建多少个新变量。

+3

目前尚不清楚你实际上试图做。你能展示一个更完整的例子吗?这只是无效的Go,这就是编译器和格式化程序都抱怨的原因。 – JimB

+0

@JimB我正在尝试将一个字节数组分割成多个字节数组,以便分别对它们中的每一个执行一些算术运算 – rullzing

+0

但是短变量声明'variable_ [i]:= ...'不会使感。你期望在这里发生什么? – JimB

回答

4

Go不是一种解释型语言,因此您无法在运行时创建变量名称并为其分配一些变量。但是,你可以使用map,用适当的值赋给新的变量作为其键:

package main 

import (
    "fmt" 
) 

func main() { 
    variable := make(map[int][]int) 

    number := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20} 

    for i := 0; i < len(number); i += 10 { 
     variable[i] = number[i : i+10] 

    } 
    fmt.Println(variable) 

} 

https://play.golang.org/p/6VYM0vuBmU

输出(由我更好redability格式化):

map[ 
    0: [1 2 3 4 5 6 7 8 9 10] 
    10:[11 12 13 14 15 16 17 18 19 20] 
] 

variable[0]variable[10]是片10个整数。

+2

你检查了链接吗?源片被分成10个元素中的每个元素的2个变量'变量[0]'和变量[10]。 –

0

我认为这可以实现您的目标。

package main 

import (
    "fmt" 
    "math/rand" 
) 

func main() { 
    //get some random byte data 
    number := make([]byte, 27) 
    rand.Read(number) 
    fmt.Println("all the bytes: ", number) 

    //make an output variable 
    var tensOfBytes [][]byte 

    //loop through number 
    for i := 10; i < len(number); i += 10 { 
     //get a chunk of values and store it in tensOfBytes 
     tensOfBytes = append(tensOfBytes, number[i - 10 : i]) 
    } 

    fmt.Println("bytes in 10s:") 
    for _, chunk := range tensOfBytes { 
     fmt.Println("\t", chunk) 
    } 
} 

https://play.golang.org/p/BKQB7JwSHw

一般情况下,你需要小心在循环中的索引...

  • 如果你确定的字节数是10的倍数,你'很好去。
  • i增加10循环的每次迭代中,要小心使用它作为另一个变量的指标..
  • 可能还有其它边缘情况..
相关问题