//结构体转json
func StructToJson(){
data,_:=json.Marshal(结构体)
jsonStr := string(data)
}
//json转结构体
func JsonToStruct(){
jsonStr:=`{"name":"Alice","addr":"Green Street"}`
结构体对象:=new(结构体Struct)
err:=json.Unmarshal([]byte(jsonStr),结构体对象)
if err!=nil{
panic(err)
}
log.Println(结构体对象)
}
//json转map
func JsonToMap() {
jsonStr := `{"name":"cheney","age":26}`
var mapResult map[string]interface{}
if err := json.Unmarshal([]byte(jsonStr), &mapResult); err != nil {
fmt.Println(err)
}
fmt.Println(mapResult)
}
//map转结构体(三方包:"github.com/goinggo/mapstructure")
func MapToStruct() {
mapInstance := make(map[string]interface{})
mapInstance["Name"] = "liang637210"
mapInstance["Age"] = 28
var person Person
//将 map 转换为指定的结构体
if err := mapstructure.Decode(mapInstance, &person); err != nil {
fmt.Println(err)
}
fmt.Printf("map2struct后获得的 struct 内容为:%v", person)
}
//结构体转map,调用方式:mp, _ := StructToMap(&user, "json")
func StructToMap(in interface{}, tagName string) (map[string]interface{}, error) {
out := make(map[string]interface{})
v := reflect.ValueOf(in)
if v.Kind() == reflect.Ptr {
v = v.Elem()
}
if v.Kind() != reflect.Struct { // 非结构体返回错误提示
return nil, fmt.Errorf("ToMap only accepts struct or struct pointer; got %T", v)
}
t := v.Type()
for i := 0; i < v.NumField(); i++ {
fi := t.Field(i)
if tagValue := fi.Tag.Get(tagName); tagValue != "" {
out[tagValue] = v.Field(i).Interface()
}
}
return out, nil
}
//常用时间戳
func Timestamp() {
fmt.Printf("时间戳(秒):%v;\n", time.Now().Unix())
fmt.Printf("时间戳(纳秒):%v;\n",time.Now().UnixNano())
fmt.Printf("时间戳(毫秒):%v;\n",time.Now().UnixNano() / 1e6)
fmt.Printf("时间戳(纳秒转换为秒):%v;\n",time.Now().UnixNano() / 1e9)
}
//int转string
string := strconv.Itoa(int)
//string转成int
int, err := strconv.Atoi(string)
//string转成int64
int64, err := strconv.ParseInt(string, 10, 64)
//int64转成string
string := strconv.FormatInt(int64,10)
//字符串md5
func EncodeMD5(value string) string {
m := md5.New()
m.Write([]byte(value))
return hex.EncodeToString(m.Sum(nil))
}
//生成不同位数的数字(用于验证码相关业务)
func GenValidateCode(width int) string {
numeric := [10]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
r := len(numeric)
rand.Seed(time.Now().UnixNano())
var sb strings.Builder
for i := 0; i < width; i++ {
fmt.Fprintf(&sb, "%d", numeric[rand.Intn(r)])
}
return sb.String()
}
//获取随机字符串
func GetRandStr(n int) (randStr string) {
chars := "ABCDEFGHIJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789"
charsLen := len(chars)
if n > 10 {
n = 10
}
rand.Seed(time.Now().UnixNano())
for i := 0; i < n; i++ {
randIndex := rand.Intn(charsLen)
randStr += chars[randIndex : randIndex+1]
}
return randStr
}
//切片中是否包含某个value
func IsContain(items []string, item string) bool {
for _, eachItem := range items {
if eachItem == item {
return true
}
}
return false
}
//手机号中间4位加*操作
func FormatMobileStar(mobile string) string {
if len(mobile) <= 10 {
return mobile
}
return mobile[:3] + "****" + mobile[7:]
}
//string数字转换成float64类型
f, _ := strconv.ParseFloat("183412.4523", 64)
//float64转string
str = strconv.FormatFloat(1.468194141, 'f', -1, 32)
golang常用方法(持续更新)
于 2022-11-21 12:01:23 首次发布