String interning traditionally means mapping multiple strings with equal contents to a single string in memory. Doing so improves program speed by replacing slow string comparisons with fast pointer comparisons.
The intern package for Go takes a slightly different approach: It maps strings to integers. This serves two purposes. First, in Go, unlike C, a string is not simply a pointer to an array of characters so the pointer-comparison approach doesn't apply as naturally in Go as it does in C. Second, the package provides a rather unique mechanism for preserving order. That is, strings can be mapped to integers in such a way that if one string precedes another alphabetically, then the first string will map to a smaller integer than the second string.
More specifically, intern provides two symbol types: Eq, which supports only comparisons for equality and inequality (== and !=); and LGE, which supports less than, greater than, and equal to comparisons (<, >, ==, <=, >=, and !=). The former is faster to allocate, and allocation always succeeds. The latter is slower to allocate and generally requires a pre-allocation step to avoid running out of integers that preserve the less than/greater than/equal to properties between all pairs of interned strings.
Assuming you're using the Go module system, simply import the package into your program with
import "github.com/spakin/intern"and run
go mod tidyto download and install intern.
Descriptions and examples of the intern API can be found online in the pkg.go.dev documentation.