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?
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 .
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.