Duplicate strings can waste memory and cause lots of allocations, but may be cheaper at allocation time. Interning strings has a lookup cost, but can save memory and even CPU by reduced number of GCs. I'd like to have this choice, for when I know my strings are large and likely duplicates. Manual interning in user code, var internedStrings struct{ sync.RWMutex m map[string]string } ... leads to lock contention and a map that grows forever. The runtime could have a less contentious map and could integrate with the garbage collector, such that strings that are only referenced from the intern table to themselves are still collected and removed from the internal map.