golang常用的几种生成订单号方法
package main
import (
"fmt"
"math/rand"
"os"
"time"
)
func generateOrderNumber() string {
// 生成当前日期部分(例如:20231008)
datePart := time.Now().Format("20060102")
// 生成随机数部分(4位随机数)
rand.Seed(time.Now().UnixNano())
randomPart := fmt.Sprintf("%04d", rand.Intn(10000))
// 添加固定前缀
prefix := "ORDER"
// 最终的订单号由前缀、日期和随机数部分组成
orderNumber := fmt.Sprintf("%s-%s-%s", prefix, datePart, randomPart)
return orderNumber
}
// 生成订单号
func generateOrderNumber2() string {
// 获取当前日期时间作为订单号的一部分
currentTime := time.Now().Format("20060102150405")
// 生成随机数作为订单号的一部分
rand.Seed(time.Now().UnixNano())
randomPart := fmt.Sprintf("%04d", rand.Intn(10000))
// 构建订单号
orderNumber := currentTime + randomPart
return orderNumber
}
// generateOrderNumber 生成订单号
func generateOrderNumber3() string {
// 获取当前时间戳
currentTime := time.Now().Format("20060102150405")
// 获取机器名或其他标识符
hostname, err := os.Hostname()
if err != nil {
// 处理错误
fmt.Println("无法获取主机名:", err)
return ""
}
// 组合订单号
orderNumber := currentTime + "-" + hostname
return orderNumber
}
// 生成订单号18位
func generateOrderNumber4() string {
timestamp := time.Now().UnixNano() / int64(time.Millisecond)
randNum := 10000 + rand.Intn(10000)
orderNumber := fmt.Sprintf("%d%d", timestamp, randNum)
return orderNumber
}
func main() {
orderNumber := generateOrderNumber()
fmt.Println("生成的订单号:", orderNumber)
orderNumber2 := generateOrderNumber2()
fmt.Println("生成的订单号2:", orderNumber2)
orderNumber3 := generateOrderNumber3()
fmt.Println("生成的订单号3:", orderNumber3)
orderNumber4 := generateOrderNumber4()
fmt.Println("生成的订单号4:", orderNumber4)
}