添加[]字节附加切片[]字节

时间:2019-04-19 17:32:33

标签: go byte slice

我开始学习GO语言,但我不太了解某些内容,也许我只是感到困惑和疲倦。 这是我的代码,有一个结果数组(来自编码字符串,大小2139614元素)。我需要解码它们并进一步使用它们。但是,当我运行一次迭代时,结果片段是原来的两倍,而上半部分完全是空的。因此,我将切片并添加到所需的范围。

为什么会这样?

立即解码结果并重新记录可能会更容易,但是我不知道该怎么做)))

也许有完全不同的方式,作为一个初学者,我还不知道

        result := []string{}

    for i, _ := range input {
        result = append(result, i)
    }
    sort.Strings(result)

    rips := make([][]byte, 2139614)

    for _, i := range result {
        c := Decode(i)
        c = c[1:37]
        rips = append(rips, c)
    }
        //len(result) == 2139614

    for i := 2139610; i < 2139700; i++ {
        fmt.Println(i, rips[i])
    }

    resultrips := rips[2139614:]
    for _,i := range resultrips {
        fmt.Println(i)
    }

    fmt.Println("All write: ", len(resultrips))

和这个问题:如果我需要一个字节数组数组,我就做对了(我这样做是为了不做太多工作,并且将检查字节值,因为没有任何编码)。 / p>

rips := make([][]byte, 2139614) //数组[] byte

最后,我需要使用C ++中的集合类型的数组来检查集合中是否有元素 在C ++中是代码: if (resultrips.count > 0) { ... }

1 个答案:

答案 0 :(得分:2)

写时:

make([][]byte, 2139614)

这将创建一个切片,切片的长度为的容量等于2139614。当您append切片时,它总是附加在最后一个元素之后,从而增加了长度。如果要预分配一个较大的切片以便可以附加到其中,则需要指定长度0

make([][]byte, 0, 2139614)

这会预先分配2139614个元素,但是长度为0,随后的append调用将从切片的开始开始;在第一次追加之后,其长度为1,并且不需要增加其容量。

行程之行涵盖了长度与容量的关系:https://tour.golang.org/moretypes/13

基于问题文本的快速注释-请记住,切片和数组不是同一件事。数组具有编译时固定长度,其容量与长度是同义词。切片由数组支持,但具有与运行时动态无关的长度和容量。