В Go вы можете инициализировать фрагмент байта следующим образом ( попробовать его на Go Playground )
package main
import (
"fmt"
"encoding/hex"
)
// doStuff will be called many times in actual application, so we want this to be efficient
func doStuff() {
transparentGif := []byte("GIF89a\x01\x00\x01\x00\x80\x00\x00\xff\xff\xff" +
"\xff\xff\xff\x21\xf9\x04\x01\x0a\x00\x01\x00\x2c\x00\x00\x00\x00" +
"\x01\x00\x01\x00\x00\x02\x02\x4c\x01\x00\x3b\x00")
// This will be returned by a web service in actuality, but here we just hex dump it
fmt.Printf("Your gif is\n%s\n", hex.Dump(transparentGif))
}
func main() {
doStuff()
}
В этом случае данные не нужно изменять, поэтомубыло бы лучше (и, надеюсь, более эффективно) инициализировать его как константу, близкую к функции, в которой он фактически используется.
Однако, как этот вопрос проясняет, неттакая вещь, как константный срез в Go.
Есть ли более эффективный способ сделать это, сохраняя при этом небольшой объем? В идеале, когда конкатенация и выделение памяти выполняются только один раз.
Насколько я знаю, мне нужно создать фрагмент вне области действия функции, а затем передать его в качестве параметра, то есть расширить область.