当前位置: 代码迷 >> 综合 >> 1024程序员节 | 全民狂欢,拒绝加班2020-10-24,golang实用工具方法分享,拒绝加班~
  详细解决方案

1024程序员节 | 全民狂欢,拒绝加班2020-10-24,golang实用工具方法分享,拒绝加班~

热度:64   发布时间:2024-03-08 01:15:24.0

重要的事情说三遍,拒绝加班!拒绝加班!拒绝加班!

分享一些日常积累的实用golang工具小方法,从此拒绝加班~

结构体转json字符串

func DumpString(v interface{}) (str string) {bs, err := json.Marshal(v)b := bytes.Buffer{}if err != nil {b.WriteString("{err:\"json format error.")b.WriteString(err.Error())b.WriteString("\"}")} else {b.Write(bs)}str = b.String()return str
}

获取指定长度指定前缀的uuid 

import ("crypto/rand""fmt""math/big"mathrandom "math/rand""time"
)func GenerateUUID(prefex string, uuidLen int) string {var character = []byte("abcdefgijklmnopqrstuvwxyz0123456789")var chLen = len(character)buf := make([]byte, uuidLen, uuidLen)max := big.NewInt(int64(chLen))for i := 0; i < uuidLen; i++ {random, err := rand.Int(rand.Reader, max)if err != nil {mathrandom.Seed(time.Now().UnixNano())buf[i] = character[mathrandom.Intn(chLen)]continue}buf[i] = character[random.Int64()]}return fmt.Sprintf("%s-%s", prefex, string(buf))
}

深克隆结构体

func Clone(i interface{}) interface{} {typ := reflect.TypeOf(i)for typ.Kind() == reflect.Ptr {typ = typ.Elem()}vl := reflect.ValueOf(i)if vl.IsNil() {return reflect.New(typ)}for vl.Kind() == reflect.Ptr {vl = vl.Elem()}el := reflect.New(typ).Elem()el.Set(vl)return el.Addr().Interface()
}

浅拷贝结构体

func Copy(dst interface{}, src interface{}) error {if dst == nil {return fmt.Errorf("dst cannot be nil")}if src == nil {return fmt.Errorf("src cannot be nil")}bytes, err := json.Marshal(src)if err != nil {return fmt.Errorf("Unable to marshal src: %s", err)}err = json.Unmarshal(bytes, dst)if err != nil {return fmt.Errorf("Unable to unmarshal into dst: %s", err)}return nil
}

url是否合法

func IsValidHttpUrl(urlPath string) bool {u := urlPathvar httpPre = regexp.MustCompile(`^https?://`)// 协议校验if !httpPre.Match([]byte(u)) {return false}// url format校验r, err := url.Parse(urlPath)if err != nil {return false}//必须为可解析的ip或域名if net.ParseIP(r.Hostname()) == nil {ips, err := net.LookupIP(r.Hostname())if err != nil || len(ips) == 0 {return false}}return true
}

是否为ipv6

func IsIPV6(target string) bool {ip := net.ParseIP(target)if ip != nil {if ip.To4() == nil && ip.To16() != nil {return true}}return false
}

是否为ipv4

func ValidIP4(ipAddress string) bool {ipAddress = strings.Trim(ipAddress, " ")re, _ := regexp.Compile(`^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$`)if re.MatchString(ipAddress) {return true}return false
}

base64编码

func Base64Encode(s string) string {return base64.StdEncoding.EncodeToString([]byte(s))
}

base64解码

func Base64Decode(s string) (string, error) {r, err := base64.StdEncoding.DecodeString(s)if err != nil {return "", err}return string(r), nil
}

md5加密

func MD5Strings(strings ...string) string {h := md5.New()for _, s := range strings {io.WriteString(h, s)}return fmt.Sprintf("%x", h.Sum(nil))
}

数组转换为map

func ConvertSliceToMap(s []string) map[string]struct{} {ret := map[string]struct{}{}for _, v := range s {ret[v] = struct{}{}}return ret
}

为了减少加班,持续分享中...