web-dev-qa-db-fra.com

Taille d'un tableau d'octets Golang

J'ai un objet [] octet et je veux obtenir sa taille en octets. Y a-t-il un équivalent à la taille de C deof () dans golang? Sinon, pouvez-vous suggérer d'autres façons d'obtenir la même chose?

13
sr_149

Pour renvoyer le nombre d'octets dans une tranche d'octets, utilisez la fonction len:

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

Si vous voulez dire le nombre d'octets dans le tableau sous-jacent, utilisez cap à la place:

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

Un octet est garanti être un octet: https://golang.org/ref/spec#Size_and_alignment_guarantees .

14
Caleb

Je pense que votre meilleur pari serait;

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

Bien qu'il existe de nombreuses options, comme importer simplement dangereux et utiliser sizeof;

import unsafe "unsafe"

size := unsafe.Sizeof(bytes)

Notez que pour certains types, comme les tranches, Sizeof va vous donner la taille du descripteur de tranche qui n'est probablement pas ce que vous voulez. Gardez également à l'esprit que la longueur et la capacité de la tranche sont différentes et que la valeur renvoyée par binary.Size reflète la longueur.

9
evanmcdonnal