sid.go 608 B

1234567891011121314151617181920212223242526272829303132
  1. package sid
  2. import (
  3. "github.com/pkg/errors"
  4. "github.com/sony/sonyflake"
  5. )
  6. type Sid struct {
  7. sf *sonyflake.Sonyflake
  8. }
  9. func NewSid() *Sid {
  10. sf := sonyflake.NewSonyflake(sonyflake.Settings{})
  11. if sf == nil {
  12. panic("sonyflake not created")
  13. }
  14. return &Sid{sf}
  15. }
  16. func (s Sid) GenString() (string, error) {
  17. // 生成分布式ID
  18. id, err := s.sf.NextID()
  19. if err != nil {
  20. return "", errors.Wrap(err, "failed to generate sonyflake ID")
  21. }
  22. // 将ID转换为字符串
  23. return convert.IntToBase62(int(id)), nil
  24. }
  25. func (s Sid) GenUint64() (uint64, error) {
  26. // 生成分布式ID
  27. return s.sf.NextID()
  28. }