From 508527f52de524a4fd174d386808e314b4138b11 Mon Sep 17 00:00:00 2001 From: alex emery Date: Sun, 3 Nov 2024 15:33:28 +0000 Subject: feat: static builds --- content/posts/005.md | 39 --------------------------------------- 1 file changed, 39 deletions(-) delete mode 100644 content/posts/005.md (limited to 'content/posts/005.md') diff --git a/content/posts/005.md b/content/posts/005.md deleted file mode 100644 index e2b3dfc..0000000 --- a/content/posts/005.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: "Go's unique pkg" -tags: posts -toc: true ---- - -https://pkg.go.dev/unique ->The unique package provides facilities for canonicalising ("interning") comparable values.[^1] -[^1]: https://pkg.go.dev/unique - -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](https://en.wikipedia.org/wiki/Interning_(computer_science)). - -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 -```go -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] -[^2]: https://go.dev/blog/unique - -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. -- cgit v1.2.3