我同意Brainstorm的方法:假设您要传递机器友好的二进制表示形式,请使用该
encoding/binary库。OP建议
binary.Write()可能会有一些开销。纵观源的实施
Write(),我看到它做了一些运行时的决策最大的灵活性。
func Write(w io.Writer, order ByteOrder, data interface{}) error { // Fast path for basic types. var b [8]byte var bs []byte$switch v := data.(type) {$ case *int8:$ bs = b[:1]$ b[0] = byte(*v)$ case int8:$ bs = b[:1]$ b[0] = byte(v)$ case *uint8:$ bs = b[:1]$ b[0] = *v$ ...对?Write()接受一个非常通用的
data第三个参数,这会带来一些开销,因为Go运行时随后被迫对类型信息进行编码。由于
Write()在此处执行了一些您根本不需要的运行时决策,也许您可以直接调用编码函数,看看它是否更好。
像这样:
package mainimport ( "encoding/binary" "fmt")func main() { bs := make([]byte, 4) binary.LittleEndian.PutUint32(bs, 31415926) fmt.Println(bs)}让我们知道这是如何执行的。
否则,如果您只是尝试获取整数的ASCII表示形式,则可以获取字符串表示形式(可能带有
strconv.Itoa),并将该字符串转换为
[]byte类型。
package mainimport ( "fmt" "strconv")func main() { bs := []byte(strconv.Itoa(31415926)) fmt.Println(bs)}


