Go - 常用函式
阿新 • • 發佈:2021-01-02
// 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 }