From 6beea1d4127d2d51bfdc75162423407c198d19da Mon Sep 17 00:00:00 2001 From: a73x Date: Sat, 21 Dec 2024 11:53:54 +0000 Subject: add date to posts --- public/posts/2024-08-31-01 | 107 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 public/posts/2024-08-31-01 (limited to 'public/posts/2024-08-31-01') diff --git a/public/posts/2024-08-31-01 b/public/posts/2024-08-31-01 new file mode 100644 index 0000000..1c25a70 --- /dev/null +++ b/public/posts/2024-08-31-01 @@ -0,0 +1,107 @@ + + + + + + + + + + a73x + + + + + + +
+
+
+

a73x

+ high effort, low reward +
+

[{home /} {posts /posts} {ethos /ethos}]

+

posts/2024-08-31-01.html

+ +
+ +← Posts +

Go's unique pkg

+

https://pkg.go.dev/unique

+ +
+

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.

+ + + + + +
+ + + + -- cgit v1.2.3