国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

golang 獲取一個結構體 struct 大小的代碼

2019-11-08 20:07:45
字體:
來源:轉載
供稿:網友

首先,結構體里不要有指向上一層的指針,否則會循環讀取直至崩潰,后面會把這個問題修掉。僅限測試使用

下面上源代碼

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.github地址 https://github.com/Re-volution/sizestruct


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 托克逊县| 江口县| 繁昌县| 吴川市| 开平市| 巴林左旗| 石阡县| 通辽市| 池州市| 禹城市| 恩施市| 漳浦县| 云安县| 岳阳县| 乌鲁木齐市| 新宾| 苏尼特左旗| 南阳市| 公安县| 额尔古纳市| 祥云县| 兴国县| 独山县| 四川省| 丁青县| 泸水县| 乐至县| 龙里县| 墨江| 永宁县| 嘉义市| 米易县| 葵青区| 东辽县| 徐汇区| 会同县| 民乐县| 新沂市| 阜康市| 临海市| 南郑县|