字节数组golang的大小

时间:2015-07-30 20:11:55

标签: go bytearray sizeof

我有一个[]字节对象,我希望以字节为单位获取它的大小。在golang中是否有相当于C的sizeof()?如果没有,你能建议其他方法来获得相同的东西吗?

2 个答案:

答案 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返回的值反映了长度。