Go - 常用函数

// float64保留2位小数
func Decimal(value float64) float64 {
   value, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", value), 64)
   return value
}

 

// 获取两点之间的距离 单位km
// lat 纬度 lng经度
func EarthDistance(lat1, lng1, lat2, lng2 float64) float64 {
	radius := 6378.137
	rad := math.Pi / 180.0
	lat1 = lat1 * rad
	lng1 = lng1 * rad
	lat2 = lat2 * rad
	lng2 = lng2 * rad
	theta := lng2 - lng1
	dist := math.Acos(math.Sin(lat1)*math.Sin(lat2) + math.Cos(lat1)*math.Cos(lat2)*math.Cos(theta))
	return dist * radius
}

  

 

// 生成订单号
// 前面17位代表时间精确到毫秒,中间3位代表进程id,最后4位代表序号
func Generate(t time.Time) string {
   s := t.Format(timeformat.Continuity)
   m := t.UnixNano()/1e6 - t.UnixNano()/1e9*1e3
   ms := sup(m, 3)
   p := os.Getpid() % 1000
   ps := sup(int64(p), 3)
   i := atomic.AddInt64(&num, 1)
   r := i % 10000
   rs := sup(r, 4)
   n := fmt.Sprintf("%s%s%s%s", s, ms, ps, rs)
   return n
}

//对长度不足n的数字前面补0
func sup(i int64, n int) string {
   m := fmt.Sprintf("%d", i)
   for len(m) < n {
      m = fmt.Sprintf("0%s", m)
   }
   return m
}

  

posted @ 2021-01-02 12:50  Zel+_+  阅读(149)  评论(0编辑  收藏  举报