Golang—常用技巧

426 阅读1分钟

结构体使用

json解析是如果不明确字段的类型可使用模糊匹配解析,(应用类型反射实现会有一定的性能浪费

import github.com/json-iterator/gotype UserInfo string{    Name string   `json:"name"`    Age  int      `json:"age"`  }content := []byte{}// 例如当不明确源数据age是string还是int的时候,可开启模糊匹配extra.RegisterFuzzyDecoders()var object UserInfoif err := jsoniter.Unmarshal(content, &object); err ==nil{    }


使用匿名结构体属性实现继承能力

type Common struct {    Body interface{} `json:"body"`    Code int         `json:"code"`    Msg  string      `json:"msg"`}type UserInfo string{    Name string   `json:"name"`    Age  int      `json:"age"`  }type content struct {    Common    Body []UserInfo `json:"body"`}


结构体赋值可以使用索引方式(匿名字段赋值很友好),适用struct类型结构很少变动的情况

type UserInfo string{    Name string   `json:"name"`    Age  int      `json:"age"`  }user := UserInfo{"ouyangjun",27}


Json转换到struct,遇到接口未赋值如何处理?

1、如果value不在默认值范围内,可以通过值进行判断; 例如data.bid !=02、如果是struct(可以进行比较的类型)直接与空接口提进行比较; 例如 value == user{}3、将结构体的属性定义为指针类型,然后判断是否为nil(有局限性);例如value ==nil


错误处理

打印错误的堆栈信息,便于捕获一些不明确异常

func stack() string {    var buf [2 << 10]byte    return string(buf[:runtime.Stack(buf[:], true)])}


持续更新。。。