Есть ли способ генерировать кусочек байтов, заполненный определенным символом? - PullRequest
0 голосов
/ 09 ноября 2018

Я хочу динамически сгенерировать часть байтов и предварительно заполнить их значением. В этом случае, если сложность равна 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 голосов
/ 09 ноября 2018

В 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]
0 голосов
/ 09 ноября 2018

Я думаю, это зависит от того, что вы подразумеваете под оптимизацией. Если вы имеете в виду производительность, то нет, не совсем. В конечном счете, когда вы «запрашиваете» некоторую память, ее необходимо выполнить для установки значений. Это часто было более заметно при написании C / C ++ после использования malloc. Если вы посмотрите на содержимое памяти, это может быть набор из 0, но скорее всего это набор случайных значений.

Однако, если вы хотите просто написать меньше кода и использовать уже существующее, вы можете взглянуть на bytes.Repeat :

targetPrefix := bytes.Repeat([]byte("0"), difficulty)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...