Skip to content

Instantly share code, notes, and snippets.

@karlseguin
Created September 15, 2013 12:26
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save karlseguin/6570372 to your computer and use it in GitHub Desktop.
Save karlseguin/6570372 to your computer and use it in GitHub Desktop.
String interning in Golang
package intern
import (
"sync"
)
type Pool struct {
sync.RWMutex
lookup map[string]string
}
func New() *Pool {
return &Pool{lookup: make(map[string]string)}
}
func (p *Pool) Intern(s string) string {
p.RLock()
ss, exists := p.lookup[s]
p.RUnlock()
if exists { return ss }
p.Lock()
defer p.Unlock()
ss, exists = p.lookup[s]
if exists { return ss }
p.lookup[s] = s
return s
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment