有没有一种方法可以生成由特定字符填充的字节片?

时间:2018-11-08 22:32:51

标签: go

我想动态生成一个字节片,并用一个值预填充它们。在这种情况下,如果难度为3,我想生成[]byte("000")

我有下面的工作代码,是否有将其优化为单线的代码? (即初始化它,而不必运行for循环并手动设置每个元素)?

var targetPrefix []byte = make([]byte, difficulty)

for i := 0; i < difficulty; i++ {
  targetPrefix[i] = 48 // UTF8 encoding for "0"
}

2 个答案:

答案 0 :(得分:4)

我想这取决于您对优化的含义。如果您的意思是性能,那不是真的。最终,当您“请求”一些内存时,必须反复遍历才能设置值。使用malloc之后编写C / C ++时,这通常更明显。如果您查看内存的内容,它可能是一堆0,但可能是一堆随机值。

但是,如果您打算只编写较少的代码并利用已有的内容,则可以看看bytes.Repeat

targetPrefix := bytes.Repeat([]byte("0"), difficulty)

答案 1 :(得分:0)

在Go中,将您的代码编写为:

package main

import "fmt"

func main() {
    difficulty := 7
    targetPrefix := make([]byte, difficulty)
    for i := range targetPrefix {
        targetPrefix[i] = '0'
    }
    fmt.Println(targetPrefix)
}

游乐场:https://play.golang.org/p/QrxEvsnRKMC

输出:

[48 48 48 48 48 48 48]

或者,也可以在Go中编写:

package main

import (
    "bytes"
    "fmt"
)

func main() {
    difficulty := 7
    targetPrefix := bytes.Repeat([]byte{'0'}, difficulty)
    fmt.Println(targetPrefix)
}

游乐场:https://play.golang.org/p/Setx4kXTo1_H

输出:

[48 48 48 48 48 48 48]