在 GAE/Go 中获取结构的大小
Getting size of a structure in GAE/Go
我想获取 GAE/Go 中结构的大小。
我阅读了post并编写了如下代码。
import (
"reflect"
"unsafe"
)
func GetSize(T interface{}) {
size := reflect.TypeOf(T).Size()
return int((*int)(unsafe.Pointer(size)))
}
但是这段代码不起作用,因为 GAE 不允许导入 unsafe
。
如何在 GAE/Go 中执行此操作?
您提出的解决方案不是有效代码,它有多个错误。
例如 GetSize()
没有结果类型,所以你不能 return 任何东西。
接下来,您 return 的表达式也是语法错误,它试图将 *int
指针转换为无效的 int
。
您需要先取消引用指针,因此正确的语法是:
func GetSize(T interface{}) int {
size := reflect.TypeOf(T).Size()
return int(*(*int)(unsafe.Pointer(size)))
}
但是。没有意义。 reflect.Type.Size()
已经 return 大小(存储给定类型的值所需的字节数),因此不需要 unsafe
魔法。可能令人困惑的是它的 return 类型是 uintptr
,但您可以简单地在将其转换为 int
之后使用该值。例如
只需使用:
func GetSize(v interface{}) int {
return int(reflect.TypeOf(v).Size())
}
正在测试:
fmt.Println("Size of int:", GetSize(int(0)))
fmt.Println("Size of int64:", GetSize(int64(0)))
fmt.Println("Size of [100]byte:", GetSize([100]byte{}))
输出(在 Go Playground 上尝试):
Size of int: 4
Size of int64: 8
Size of [100]byte: 100
有一件事你不能忘记:这个GetSize()
不会递归地检查传递值的大小。因此,例如,如果它是一个带有指针字段的结构,它不会 "count" 指向值的大小,只有指针字段的大小。
由于像 map
这样的类型,构建递归计算复杂数据结构的总大小的 GetSize()
并不简单。详情见
我想获取 GAE/Go 中结构的大小。
我阅读了
import (
"reflect"
"unsafe"
)
func GetSize(T interface{}) {
size := reflect.TypeOf(T).Size()
return int((*int)(unsafe.Pointer(size)))
}
但是这段代码不起作用,因为 GAE 不允许导入 unsafe
。
如何在 GAE/Go 中执行此操作?
您提出的解决方案不是有效代码,它有多个错误。
例如 GetSize()
没有结果类型,所以你不能 return 任何东西。
接下来,您 return 的表达式也是语法错误,它试图将 *int
指针转换为无效的 int
。
您需要先取消引用指针,因此正确的语法是:
func GetSize(T interface{}) int {
size := reflect.TypeOf(T).Size()
return int(*(*int)(unsafe.Pointer(size)))
}
但是。没有意义。 reflect.Type.Size()
已经 return 大小(存储给定类型的值所需的字节数),因此不需要 unsafe
魔法。可能令人困惑的是它的 return 类型是 uintptr
,但您可以简单地在将其转换为 int
之后使用该值。例如
只需使用:
func GetSize(v interface{}) int {
return int(reflect.TypeOf(v).Size())
}
正在测试:
fmt.Println("Size of int:", GetSize(int(0)))
fmt.Println("Size of int64:", GetSize(int64(0)))
fmt.Println("Size of [100]byte:", GetSize([100]byte{}))
输出(在 Go Playground 上尝试):
Size of int: 4
Size of int64: 8
Size of [100]byte: 100
有一件事你不能忘记:这个GetSize()
不会递归地检查传递值的大小。因此,例如,如果它是一个带有指针字段的结构,它不会 "count" 指向值的大小,只有指针字段的大小。
由于像 map
这样的类型,构建递归计算复杂数据结构的总大小的 GetSize()
并不简单。详情见