如何在 golang 中以字节为单位获取结构的大小及其内容?

2023-08-12  本文已影响0人  robertzhai

unsafe.Sizeof 加和

package main

import (
    "fmt"
    "unsafe"
)

type ASDF struct {
    A uint64
    B uint64
    C uint64
    D uint64
    E uint64
    F string
}

func (s *ASDF) size() int {
    size := int(unsafe.Sizeof(*s))
    size += len(s.F)
    return size
}

func sizeASDF(s []ASDF) int {
    size := 0
    s = s[:cap(s)]
    size += cap(s) * int(unsafe.Sizeof(s))
    for i := range s {
        size += (&s[i]).size()
    }
    return size
}

func main() {
    a := []ASDF{}

    b := ASDF{}
    b.A = 1
    b.B = 2
    b.C = 3
    b.D = 4
    b.E = 5
    b.F = "ASrtertetetetetetetDF"
    fmt.Println((&b).size())
    a = append(a, b)

    c := ASDF{}
    c.A = 10
    c.B = 20
    c.C = 30
    c.D = 40
    c.E = 50
    c.F = "ASetDF"
 
上一篇 下一篇

猜你喜欢

热点阅读