a73x
high effort, low reward← Posts
Go's unique pkg
The unique package provides facilities for canonicalising ("interning") comparable values.1
oh yeah, thats obvious I fully understand what this package does now, great read, tune in for the next post.
Interning, is the re-use of an object of equal value instead of creating a new one. I'm pretending I knew this but really I've just reworded Interning.
So lets try again.
If you're parsing out a csv of bank transactions, its very likely a lot of names will be repeated. Instead of allocating memory for each string representing a merchant, you can simply reuse the the same string.
So the dumbed down version might look like
var internedStrings sync.Map
func Intern(s string) string {
if val, ok := internedStrings.Load(s); ok {
return val.(string)
}
internedStrings.Store(s, s)
return s
}
With a small demo here https://go.dev/play/p/piSYjCHIcLr
This implementation is fairly naive, it can only grow and it only works with strings, so naturally go's implementation is a better.
It's also worth noting, that since strings are a pointer under the hood
When comparing two strings, if the pointers are not equal, then we must compare their contents to determine equality. But if we know that two strings are canonicalized, then it is sufficient to just check their pointers.2
So to recap, goes unique package provides a way to reuse objects instead of creating new ones, if we consider the objects of equal value.