• golang常用方法


    1. //结构体转json
    2. func StructToJson(){
    3. data,_:=json.Marshal(结构体)
    4. jsonStr := string(data)
    5. }
    6. //json转结构体
    7. func JsonToStruct(){
    8. jsonStr:=`{"name":"Alice","addr":"Green Street"}`
    9. 结构体对象:=new(结构体Struct)
    10. err:=json.Unmarshal([]byte(jsonStr),结构体对象)
    11. if err!=nil{
    12. panic(err)
    13. }
    14. log.Println(结构体对象)
    15. }
    16. //json转map
    17. func JsonToMap() {
    18. jsonStr := `{"name":"cheney","age":26}`
    19. var mapResult map[string]interface{}
    20. if err := json.Unmarshal([]byte(jsonStr), &mapResult); err != nil {
    21. fmt.Println(err)
    22. }
    23. fmt.Println(mapResult)
    24. }
    25. //map转结构体(三方包:"github.com/goinggo/mapstructure")
    26. func MapToStruct() {
    27. mapInstance := make(map[string]interface{})
    28. mapInstance["Name"] = "liang637210"
    29. mapInstance["Age"] = 28
    30. var person Person
    31. //将 map 转换为指定的结构体
    32. if err := mapstructure.Decode(mapInstance, &person); err != nil {
    33. fmt.Println(err)
    34. }
    35. fmt.Printf("map2struct后获得的 struct 内容为:%v", person)
    36. }
    37. //结构体转map,调用方式:mp, _ := StructToMap(&user, "json")
    38. func StructToMap(in interface{}, tagName string) (map[string]interface{}, error) {
    39. out := make(map[string]interface{})
    40. v := reflect.ValueOf(in)
    41. if v.Kind() == reflect.Ptr {
    42. v = v.Elem()
    43. }
    44. if v.Kind() != reflect.Struct { // 非结构体返回错误提示
    45. return nil, fmt.Errorf("ToMap only accepts struct or struct pointer; got %T", v)
    46. }
    47. t := v.Type()
    48. for i := 0; i < v.NumField(); i++ {
    49. fi := t.Field(i)
    50. if tagValue := fi.Tag.Get(tagName); tagValue != "" {
    51. out[tagValue] = v.Field(i).Interface()
    52. }
    53. }
    54. return out, nil
    55. }
    56. //常用时间戳
    57. func Timestamp() {
    58. fmt.Printf("时间戳(秒):%v;\n", time.Now().Unix())
    59. fmt.Printf("时间戳(纳秒):%v;\n",time.Now().UnixNano())
    60. fmt.Printf("时间戳(毫秒):%v;\n",time.Now().UnixNano() / 1e6)
    61. fmt.Printf("时间戳(纳秒转换为秒):%v;\n",time.Now().UnixNano() / 1e9)
    62. }
    63. //int转string
    64. string := strconv.Itoa(int)
    65. //string转成int
    66. int, err := strconv.Atoi(string)
    67. //string转成int64
    68. int64, err := strconv.ParseInt(string, 10, 64)
    69. //int64转成string
    70. string := strconv.FormatInt(int64,10)
    71. //字符串md5
    72. func EncodeMD5(value string) string {
    73. m := md5.New()
    74. m.Write([]byte(value))
    75. return hex.EncodeToString(m.Sum(nil))
    76. }
    77. //生成不同位数的数字(用于验证码相关业务)
    78. func GenValidateCode(width int) string {
    79. numeric := [10]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    80. r := len(numeric)
    81. rand.Seed(time.Now().UnixNano())
    82. var sb strings.Builder
    83. for i := 0; i < width; i++ {
    84. fmt.Fprintf(&sb, "%d", numeric[rand.Intn(r)])
    85. }
    86. return sb.String()
    87. }
    88. //获取随机字符串
    89. func GetRandStr(n int) (randStr string) {
    90. chars := "ABCDEFGHIJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789"
    91. charsLen := len(chars)
    92. if n > 10 {
    93. n = 10
    94. }
    95. rand.Seed(time.Now().UnixNano())
    96. for i := 0; i < n; i++ {
    97. randIndex := rand.Intn(charsLen)
    98. randStr += chars[randIndex : randIndex+1]
    99. }
    100. return randStr
    101. }
    102. //切片中是否包含某个value
    103. func IsContain(items []string, item string) bool {
    104. for _, eachItem := range items {
    105. if eachItem == item {
    106. return true
    107. }
    108. }
    109. return false
    110. }
    111. //手机号中间4位加*操作
    112. func FormatMobileStar(mobile string) string {
    113. if len(mobile) <= 10 {
    114. return mobile
    115. }
    116. return mobile[:3] + "****" + mobile[7:]
    117. }
    118. //string数字转换成float64类型
    119. f, _ := strconv.ParseFloat("183412.4523", 64)
    120. //float64转string
    121. str = strconv.FormatFloat(1.468194141, 'f', -1, 32)

  • 相关阅读:
    Flutter FlutterActivity找不到
    Ubuntu18.04+RTX3060显卡配置pytorch、cuda、cudnn和miniconda
    vue数据监听 -key的作用
    (6)SpringCloud-Spring Boot项目详细搭建步骤
    【Javascript】不满意网上的Token无感知刷新方案,自己琢磨了个感觉还不错~
    树莓派之快速上手-变身个人Linux电脑
    uniapp 一次性上传多条视频 u-upload accept=“video“ uni.chooseMedia uni.uploadFile
    点云库PCL学习——点云的格式、PCD文件的打开和显示
    windows中运行项目中.sh和kaggle安装与配置
    再看目标检测map指标
  • 原文地址:https://blog.csdn.net/qq_39535807/article/details/127961468