golang 获取一个结构体 struct 大小的代码
来源:互联网 发布:中国质造淘宝板块 编辑:程序博客网 时间:2024/06/05 15:31
首先,结构体里不要有指向上一层的指针,否则会循环读取直至崩溃,后面会把这个问题修掉。仅限测试使用
下面上源代码
package sizestructimport ( "fmt" "reflect" "unsafe")func SizeStruct(data interface{}) int { return sizeof(reflect.ValueOf(data))}func sizeof(v reflect.Value) int { switch v.Kind() { case reflect.Map: sum := 0 keys := v.MapKeys() for i := 0; i < len(keys); i++ { mapkey := keys[i] s := sizeof(mapkey) if s < 0 { return -1 } sum += s s = sizeof(v.MapIndex(mapkey)) if s < 0 { return -1 } sum += s } return sum case reflect.Slice, reflect.Array: sum := 0 for i, n := 0, v.Len(); i < n; i++ { s := sizeof(v.Index(i)) if s < 0 { return -1 } sum += s } return sum case reflect.String: sum := 0 for i, n := 0, v.Len(); i < n; i++ { s := sizeof(v.Index(i)) if s < 0 { return -1 } sum += s } return sum case reflect.Ptr, reflect.Interface: p := (*[]byte)(unsafe.Pointer(v.Pointer())) if p == nil { return 0 } return sizeof(v.Elem()) case reflect.Struct: sum := 0 for i, n := 0, v.NumField(); i < n; i++ { s := sizeof(v.Field(i)) if s < 0 { return -1 } sum += s } return sum case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Float32, reflect.Float64, reflect.Complex64, reflect.Complex128, reflect.Int: return int(v.Type().Size()) default: fmt.Println("t.Kind() no found:", v.Kind()) } return -1}
github地址 https://github.com/Re-volution/sizestruct
0 0
- golang 获取一个结构体 struct 大小的代码
- struct 结构体的大小
- struct结构体的大小
- struct结构的大小
- 获取一个文件的属性(struct stat结构体)
- 获取一个文件的属性(struct stat结构体)
- 结构体大小struct
- 结构体(struct) 的 sizeof 大小
- struct 结构体大小的判断
- struct 结构体类型的大小计算
- struct结构体的大小计算:
- 结构体(struct) 的 sizeof 大小
- struct 结构体类型的大小计算
- struct结构大小的问题
- 如何在编译时获取一个结构体的大小
- golang 空结构体struct{}解析
- golang结构体struct学习笔记
- #pragma预处理分析 和 struct 结构体大小的计算
- Collect data base meta data by JDBC
- threejs概览
- 创建服务器内部yum源
- jquery的表格插件jqgrid的学习
- 关于结构体的一些细节问题
- golang 获取一个结构体 struct 大小的代码
- eclemma的安装与简单使用教程
- 遇到问题---java---@value注解为null
- JS实现复制到剪贴板
- Charles Proxy for Mac & Windows (4.0.2)破解激活工具
- 处理不可中断的阻塞(java并发编程第7章)
- iOS 自定义 URL Scheme 完全指南
- 跟小博老师一起学Servlet ——Servlet之HttpServletResponse
- Android四大组件之ContentProvider(内容提供者)01