summaryrefslogtreecommitdiff
path: root/content/posts/2024-08-31-01.md
diff options
context:
space:
mode:
authoralex emery <[email protected]>2024-11-03 15:35:07 +0000
committeralex emery <[email protected]>2024-11-03 16:03:43 +0000
commitb28b124f1bc62a737bc4a11d575ff7638e65ee66 (patch)
tree19f78fa1ff45f158798e1922fb74fc8809d7b7a2 /content/posts/2024-08-31-01.md
parent508527f52de524a4fd174d386808e314b4138b11 (diff)
use obsidian symlink to posts
Diffstat (limited to 'content/posts/2024-08-31-01.md')
-rw-r--r--content/posts/2024-08-31-01.md39
1 files changed, 0 insertions, 39 deletions
diff --git a/content/posts/2024-08-31-01.md b/content/posts/2024-08-31-01.md
deleted file mode 100644
index e2b3dfc..0000000
--- a/content/posts/2024-08-31-01.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.