Go中等效的sizeof(aType)

Vec*_*tor 5 c++ size types sizeof go

C++和其他几种语言都有一个函数sizeof(int)(或者你需要的任何类型),它返回当前系统中特定数据类型消耗的字节数.

Go中是否有相同的功能?它是什么?

Pau*_*kin 9

相当于sizeofgo unsafe.Sizeof.它与C中的sizeof之间的一个区别在于它仅在值上定义(而在C中,它适用于值和类型).另一个主要区别在于,它几乎不需要,而在C中则相当常见.

一个例子是:

package main

import (
    "fmt"
    "unsafe"
)

func main() {
    fmt.Println(unsafe.Sizeof(int(0)))
}
Run Code Online (Sandbox Code Playgroud)


rob*_*b74 6

如果要查找特定的大小,有两种方法可以做到这一点 - 使用不安全的包或使用反射包.以下代码演示了两者:

package main

import (
    "fmt"
    "reflect"
    "unsafe"
)

func main() {
    var i int
    fmt.Printf("Size of var (reflect.TypeOf.Size): %d\n", reflect.TypeOf(i).Size())
    fmt.Printf("Size of var (unsafe.Sizeof): %d\n", unsafe.Sizeof(i))
}
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何直接获取类型的大小.但我认为你会发现sizeof函数不像C中那样经常需要.


pet*_*rSO 6

如果您只想查找int或的大小uint,请使用strconv.IntSize.

包strconv

常量

const IntSize = intSize
Run Code Online (Sandbox Code Playgroud)

IntSize是a intuintvalue的位大小.

例如,

package main

import (
    "fmt"
    "runtime"
    "strconv"
)

func main() {
    fmt.Println(runtime.Compiler, runtime.GOARCH, runtime.GOOS)
    fmt.Println(strconv.IntSize)
}
Run Code Online (Sandbox Code Playgroud)

输出:

gc amd64 linux
64
Run Code Online (Sandbox Code Playgroud)