我有一个[]字节对象,我希望以字节为单位获取它的大小。在golang中是否有相当于C的sizeof()?如果没有,你能建议其他方法来获得相同的东西吗?
答案 0 :(得分:12)
要返回字节切片中的字节数,请使用len
函数:
bs := make([]byte, 1000)
sz := len(bs)
// sz == 1000
如果您的意思是底层数组中的字节数使用cap
代替:
bs := make([]byte, 1000, 2000)
sz := cap(bs)
// sz == 2000
保证一个字节为一个字节:https://golang.org/ref/spec#Size_and_alignment_guarantees。
答案 1 :(得分:6)
我认为你最好的选择是;
package main
import "fmt"
import "encoding/binary"
func main() {
thousandBytes := make([]byte, 1000)
tenBytes := make([]byte, 10)
fmt.Println(binary.Size(tenBytes))
fmt.Println(binary.Size(thousandBytes))
}
https://play.golang.org/p/HhJif66VwY
虽然有很多选项,比如只导入unsafe并使用sizeof;
import unsafe "unsafe"
size := unsafe.Sizeof(bytes)
请注意,对于某些类型,例如切片,Sizeof
将为您提供切片描述符的大小,这可能不是您想要的。另外,请记住切片的长度和容量是不同的,binary.Size返回的值反映了长度。