random.go 599 B

12345678910111213141516171819202122232425262728
  1. package random
  2. import (
  3. "crypto/rand"
  4. "github.com/golang-plus/uuid/internal"
  5. "github.com/golang-plus/errors"
  6. )
  7. // NewUUID returns a new randomly uuid.
  8. func NewUUID() ([]byte, error) {
  9. uuid := make([]byte, 16)
  10. n, err := rand.Read(uuid[:])
  11. if err != nil {
  12. return nil, errors.Wrap(err, "could not generate random bytes")
  13. }
  14. if n != len(uuid) {
  15. return nil, errors.New("could not generate random bytes with 16 length")
  16. }
  17. // set version(v4)
  18. internal.SetVersion(uuid, internal.VersionRandom)
  19. // set layout(RFC4122)
  20. internal.SetLayout(uuid, internal.LayoutRFC4122)
  21. return uuid, nil
  22. }