.github
build(deps): bump the all group with 4 updates
.gitignore
Prepend the .gitignore file with the Go ignores from GitHub
.pre-commit-config.yaml
[StepSecurity] Apply security best practices (#135)
codec_test.go
fix linter warnings about unchecked errors and unused variables in benchmarks
codec.go
perf: Improve error handling performance by removing expensive formatting. Replace fmt.Errorf calls with lightweight error literals to improve parsing performance, following the same approach as Google's UUID library. (#247)
error_test.go
perf: Improve error handling performance by removing expensive formatting. Replace fmt.Errorf calls with lightweight error literals to improve parsing performance, following the same approach as Google's UUID library. (#247)
error.go
Feature/uuidv8 (#241)
generator_test.go
Fix integer overflow on 32bit architectures
generator.go
align comment with what's actually been implemented
go.mod
Update minimium Go version and modernize
LICENSE
Update copyright year.
parse_test.go
fix: deduplicate UUID parsing logic with parsing tests #217; (#218)
README.md
Update README.md to remove go report card (#255)
SECURITY.md
Create SECURITY.md (#143)
sql_test.go
fix linter warnings about unchecked errors and unused variables in benchmarks
sql.go
Update minimium Go version and modernize
uuid_test.go
fix linter warnings about unchecked errors and unused variables in benchmarks
uuid.go
Feature/uuidv8 (#241)

UUID

Package uuid provides a pure Go implementation of Universally Unique Identifiers (UUID) variant as defined in RFC-9562. This package supports both the creation and parsing of UUIDs in different formats.

This package supports the following UUID versions:

  • Version 1, based on timestamp and MAC address
  • Version 3, based on MD5 hashing of a named value
  • Version 4, based on random numbers
  • Version 5, based on SHA-1 hashing of a named value
  • Version 6, a k-sortable id based on timestamp, and field-compatible with v1
  • Version 7, a k-sortable id based on timestamp
  • Version 8, for custom UUID implementations

Project History

This project was originally forked from the github.com/satori/go.uuid repository after it appeared to be no longer maintained, while exhibiting critical flaws. We have decided to take over this project to ensure it receives regular maintenance for the benefit of the larger Go community.

We'd like to thank Maxim Bublis for his hard work on the original iteration of the package.

License

This source code of this package is released under the MIT License. Please see the LICENSE for the full content of the license.

Recommended Package Version

We recommend using v2.0.0+ of this package, as versions prior to 2.0.0 were created before our fork of the original package and have some known deficiencies.

Requirements

This package requires Go 1.25 or later

Usage

Here is a quick overview of how to use this package. For more detailed documentation, please see the GoDoc Page.

package main

import (
	"log"

	"github.com/gofrs/uuid/v5"
)

// Create a Version 4 UUID, panicking on error.
// Use this form to initialize package-level variables.
var u1 = uuid.Must(uuid.NewV4())

func main() {
	// Create a Version 4 UUID.
	u2, err := uuid.NewV4()
	if err != nil {
		log.Fatalf("failed to generate UUID: %v", err)
	}
	log.Printf("generated Version 4 UUID %v", u2)

	// Parse a UUID from a string.
	s := "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
	u3, err := uuid.FromString(s)
	if err != nil {
		log.Fatalf("failed to parse UUID %q: %v", s, err)
	}
	log.Printf("successfully parsed UUID %v", u3)
}

References