我有不同类型的 slice ,我需要用 TCP 发送它们。我的 slice 长度很大,而且不是一个常数值。有什么方法可以将 slice 转换为 []byte 而无需循环各个元素?例如,我想要这样的东西(假设这里的 mySlice 元素是 4 字节):
byteSlice := (*[4 * len(mySlice)]byte)(unsafe.Pointer(&mySlice[0]))
但它不会工作,因为 4 * len(mySlice)
不是常量。
谢谢。
最佳答案
这就是我最终所做的(将其发布为我的问题的答案):
import "unsafe"
import "reflect"
mySliceR := *(*reflect.SliceHeader)(unsafe.Pointer(&mySlice))
mySliceR.Len *= mySliceElemSize
mySliceR.Cap *= mySliceElemSize
byteSlice := *(*[]byte)(unsafe.Pointer(&mySliceR))
我针对不同的数组大小对其进行了测试,它比仅在数组足够大时循环遍历单个元素(仅使用 unsafe.Pointer)要好。
关于go - 将类型 T 的 slice 转换为 Go 中的字节 slice 的快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45596789/