Ответ 1
Я согласен с подходом Brainstorm: предполагая, что вы передаете машинное двоичное представление, используйте библиотеку encoding/binary
. OP предполагает, что binary.Write()
может иметь некоторые накладные расходы. Если посмотреть источник для реализации Write()
, я вижу, что он принимает некоторые решения во время выполнения для максимальной гибкости.
189 func Write(w io.Writer, order ByteOrder, data interface{}) error {
190 // Fast path for basic types.
191 var b [8]byte
192 var bs []byte
193 switch v := data.(type) {
194 case *int8:
195 bs = b[:1]
196 b[0] = byte(*v)
197 case int8:
198 bs = b[:1]
199 b[0] = byte(v)
200 case *uint8:
201 bs = b[:1]
202 b[0] = *v
...
Правильно? Write() принимает очень общий data
третий аргумент и что наложение некоторых накладных расходов в качестве среды выполнения Go затем принудительно вводится в информацию типа кодирования. Поскольку Write()
выполняет некоторые решения во время выполнения, которые вам просто не нужны в вашей ситуации, возможно, вы можете просто напрямую вызвать функции кодирования и посмотреть, работает ли он лучше.
Что-то вроде этого:
package main
import (
"encoding/binary"
"fmt"
)
func main() {
bs := make([]byte, 4)
binary.LittleEndian.PutUint32(bs, 31415926)
fmt.Println(bs)
}
Сообщите нам, как это выполняется.
В противном случае, если вы просто пытаетесь получить представление ASCII целого числа, вы можете получить строковое представление (возможно, с strconv.Itoa
) и произнести это string в тип []byte
.
package main
import (
"fmt"
"strconv"
)
func main() {
bs := []byte(strconv.Itoa(31415926))
fmt.Println(bs)
}