我想每次创建基于10字节切片的新变量,直到达到len(number)
。但是,Go一直给我以下错误:
左侧的非名称变量_ [i]:=
这是我到目前为止所尝试的
for i := 0; i < len(number); i += 10 {
variable_[i] := number[i : i+10]
}
我也试过了追加,但它也没有用。
知道怎么做吗?
数字是一个变量,所以它不是一个常数(它可以改变大小) 所以我事先并不知道我想要循环创建多少个新变量。
答案 0 :(得分: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
输出(由我格式化以获得更好的可更正性):
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个整数的切片。
答案 1 :(得分: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
通常,您需要注意该循环中的索引......
i
每次迭代循环增加10,小心使用它作为另一个变量的索引..