package models import ( "bytes" "crypto/md5" "encoding/hex" "encoding/json" "fmt" "io" "io/ioutil" "math/rand" "net/http" "strconv" "strings" "time" ) // 10位时间戳时间格式化 func UnixToDate(timestamp int) string { t := time.Unix(int64(timestamp), 0) return t.Format("2006-01-02 15:04:05") } // 2006-01-02 15:04:05转换成10位时间戳 func DateToUnix(str string) int64 { template := "2006-01-02 15:04:05" t, err := time.ParseInLocation(template, str, time.Local) if err != nil { fmt.Println(err) return 0 } return t.Unix() } // 10位时间戳 func GetUnixTimestamp() int64 { return time.Now().Unix() } // 13位时间戳 func GetUnixNano() int64 { return time.Now().UnixNano() / 1e6 } // 2006-01-02 15:04:05 func GetDate() string { template := "2006-01-02 15:04:05" return time.Now().Format(template) } // 一分钟后 func AfterOne() string { now := time.Now() t, _ := time.ParseDuration("1m") t1 := now.Add(t).Format("20060102150405") return t1 } // Md5加密 func Md5(str string) string { m := md5.New() m.Write([]byte(str)) return string(hex.EncodeToString(m.Sum(nil))) } // 邀请码生成 const ( BASE = "E8S2DZX9WYLTN6BQF7CP5IK3MJUAR4HV" DECIMAL = 32 PAD = "A" LEN = 8 ) func Encode(uid uint64) string { id := uid mod := uint64(0) res := "" for id != 0 { mod = id % DECIMAL id = id / DECIMAL res += string(BASE[mod]) } resLen := len(res) if resLen < LEN { res += PAD for i := 0; i < LEN-resLen-1; i++ { res += string(BASE[(int(uid)+i)%DECIMAL]) } } return res } // 封装一个生产随机数的方法 func GetRandomNum() string { var str string for i := 0; i < 6; i++ { current := rand.Intn(10) //0-9 "math/rand" str += strconv.Itoa(current) } return str } // 发送GET请求 // url:请求地址 // response:请求返回的内容 func Get(url string) (response string) { client := http.Client{Timeout: 5 * time.Second} resp, error := client.Get(url) defer resp.Body.Close() if error != nil { panic(error) } var buffer [512]byte result := bytes.NewBuffer(nil) for { n, err := resp.Body.Read(buffer[0:]) result.Write(buffer[0:n]) if err != nil && err == io.EOF { break } else if err != nil { panic(err) } } response = result.String() return } // post请求封装 func Post(url string, data interface{}, contentType string) (content string) { jsonStr, _ := json.Marshal(data) req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr)) req.Header.Add("content-type", contentType) if err != nil { panic(err) } defer req.Body.Close() client := &http.Client{Timeout: 5 * time.Second} resp, error := client.Do(req) if error != nil { panic(error) } defer resp.Body.Close() result, _ := ioutil.ReadAll(resp.Body) content = string(result) return } // 生成随机字符串 func GetRandomString(length int) string { str := "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" bytes := []byte(str) result := []byte{} r := rand.New(rand.NewSource(time.Now().UnixNano())) for i := 0; i < length; i++ { result = append(result, bytes[r.Intn(len(bytes))]) } return string(result) } // 生成随机6位数 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 Unique(s []string) []string { m := make(map[string]struct{}, 0) newS := make([]string, 0) for _, i2 := range s { if _, ok := m[i2]; !ok { newS = append(newS, i2) m[i2] = struct{}{} } } return newS }