web-dev-qa-db-ja.com

バイト配列golangのサイズ

[] byteオブジェクトがあり、そのサイズをバイト単位で取得したい。 golangにはCのsizeof()に相当するものがありますか?そうでない場合、同じことを実現する他の方法を提案できますか?

13
sr_149

バイトスライスのバイト数を返すには、len関数を使用します。

bs := make([]byte, 1000)
sz := len(bs)
// sz == 1000

基になる配列のバイト数を意味する場合は、代わりにcapを使用します。

bs := make([]byte, 1000, 2000)
sz := cap(bs)
// sz == 2000

1バイトは1バイトであることが保証されています: https://golang.org/ref/spec#Size_and_alignment_guarantees

14
Caleb

あなたの最善の策は次のとおりだと思います。

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

安全でないものをインポートしてsizeofを使用するなど、多くのオプションがあります。

import unsafe "unsafe"

size := unsafe.Sizeof(bytes)

スライスなどの一部のタイプでは、Sizeofがスライス記述子のサイズを提供することに注意してください。また、スライスの長さと容量が異なり、binary.Sizeによって返される値が長さを反映していることに注意してください。

9
evanmcdonnal