golang常用方法(持续更新)

//结构体转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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值