客户端代码:
func GenerateID() (string, error) {
c := connect.Instance() //连接 grpc
cc, cancel := c.ServerClient()
defer cancel()
//生成 id
r, err := cc.GenerateSnowflakeID(c.Ctx, &serv.GenerateSnowflakeRequest{WorkID:"1"})
if err != nil {
return "", err
}
return r.GetMessage(), err
}
func main() {
data := ""
for i:=0;i<=100;i++{
id, err := GenerateID()
str := gconv.String(id)
fmt.Println("ID(运行到第"+gconv.String(i+1)+"条):"+str+",长度:"+gconv.String(len(str)))
if strings.Contains(data,","+str+","){
fmt.Println("ID 重复(运行到第"+gconv.String(i+1)+"条):"+str)
break
}else{
if err != nil{
fmt.Println(err.Error())
}
data = data+","+str+","
}
}
}
生成结果
sunmoondeMacBook-Pro:client_test sunmoon$ go run main.go
ID(运行到第 1 条):1581769199913537536,长度:19
ID(运行到第 2 条):1581769199913537536,长度:19
ID 重复(运行到第 2 条):1581769199913537536
服务端代码
// GenerateSnowflakeID 生成 ID
func (s *Server) GenerateSnowflakeID(ctx context.Context, in *serv.GenerateSnowflakeRequest) (re *serv.GenerateReply, err error) {
gen, err := snowflake.New().SetWorkerID(gconv.Int64(in.GetWorkID())).Init()
if err != nil {
glog.Line(true).Println(err.Error())
return
}
id, err := gen.Generate()
if err != nil {
glog.Line(true).Println(err.Error())
return
}
//id := s.GetWuid()
re = &serv.GenerateReply{Message: gconv.String(id)}
return
}