Hello everyone π
Todayβs post is about finding Golang jobs abroad.
A friend of mine is operating developer job board Relocate.me. The project is built around and focused entirely on tech jobs that offer visa sponsorship/relocation assistance.
If working abroad is smth you're interested in, consider checking it out.
Here's a link to the Golang jobs that are currently on offer - https://relocate.me/search/golang
Also, subscribe to their Telegram channel to get alerts of new jobs - @relocateme
Todayβs post is about finding Golang jobs abroad.
A friend of mine is operating developer job board Relocate.me. The project is built around and focused entirely on tech jobs that offer visa sponsorship/relocation assistance.
If working abroad is smth you're interested in, consider checking it out.
Here's a link to the Golang jobs that are currently on offer - https://relocate.me/search/golang
Also, subscribe to their Telegram channel to get alerts of new jobs - @relocateme
Relocate.me
Find International Jobs: Explore Global Career Opportunities | Relocate.me
Browse the latest international jobs and discover exciting global career opportunities. Find your next job abroad here.
π177β€37π₯14π12π€―7π€5
Breaking the Monolith at Twitch: Part One
Twitch is one of a large group of successful companies that began life running as a monolithic Ruby on Rails app but theyβve written about where they went from there, how Go entered the picture, and their current practices.
About the Author: My name is Mario Izquierdo, and Iβve been a Full Stack Engineer at Twitch since 2017. Iβve worked in a variety of systems in my time here, including the public API, infrastructure, and tools for services.
From the author: This is Part One (of two) of our story chronicling Twitchβs journey from monolithic architecture to microservices. In Part One, youβll learn about our early days, from our rapid growth to the performance bottlenecks that pushed us to find better solutions. Part Two, covers βWexit,β our migration to microservices and all the challenges and benefits that came with the switch.
https://blog.twitch.tv/en/2022/03/30/breaking-the-monolith-at-twitch/
Enjoy! π€©
Twitch is one of a large group of successful companies that began life running as a monolithic Ruby on Rails app but theyβve written about where they went from there, how Go entered the picture, and their current practices.
About the Author: My name is Mario Izquierdo, and Iβve been a Full Stack Engineer at Twitch since 2017. Iβve worked in a variety of systems in my time here, including the public API, infrastructure, and tools for services.
From the author: This is Part One (of two) of our story chronicling Twitchβs journey from monolithic architecture to microservices. In Part One, youβll learn about our early days, from our rapid growth to the performance bottlenecks that pushed us to find better solutions. Part Two, covers βWexit,β our migration to microservices and all the challenges and benefits that came with the switch.
https://blog.twitch.tv/en/2022/03/30/breaking-the-monolith-at-twitch/
Enjoy! π€©
π160β€38π₯22π10π€4π€―3
Backward compatibility in Go: discussion
>>>
We now have about ten years of experience with Go 1 compatibility.
In general it works very well for the Go team and for users. However, there are also practices we've developed since then that it doesn't capture (specifically
I think it is worth extending our approach to try to break programs even less often, as well as to explicitly codify
>>>
by Russ Cox
Join the discussion if you wish https://github.com/golang/go/discussions/55090
>>>
We now have about ten years of experience with Go 1 compatibility.
In general it works very well for the Go team and for users. However, there are also practices we've developed since then that it doesn't capture (specifically
GODEBUG settings), and there are still times when usersβ programs break. I think it is worth extending our approach to try to break programs even less often, as well as to explicitly codify
GODEBUG settings and clarify when they are and are not appropriate.>>>
by Russ Cox
Join the discussion if you wish https://github.com/golang/go/discussions/55090
GitHub
extending Go backward compatibility Β· golang go Β· Discussion #55090
This discussion is about backward compatibility, meaning new versions of Go compiling older Go code. For the problem of old versions of Go compiling newer Go code, see this other discussion about f...
π67π₯49β€17π9π€7π©1
A bit of a clickbait title, but still an interesting finding: https://hmarr.com/blog/go-allocation-hunting/
Hmarr
Making a Go program run 1.7x faster with a one character change β’ Harry Marr
Harry Marr β Member of Technical Staff at Anthropic. Co-founded Dependabot, previously at GitHub, Monzo, and GoCardless.
π97β€17π₯14π©8π€―4π2
Error handling in Go is a little different than other mainstream programming languages like Java, JavaScript, or Python. Goβs built-in errors donβt contain stack traces, nor do they support conventional try/catch methods to handle them. Instead, errors in Go are just values returned by functions, and they can be treated in much the same way as any other datatype - leading to a surprisingly lightweight and simple design.
In this article, Brandon Schurman demonstrates the basics of handling errors in Go, as well as some simple strategies you can follow in your code to ensure your program is robust and easy to debug.
https://earthly.dev/blog/golang-errors/
In this article, Brandon Schurman demonstrates the basics of handling errors in Go, as well as some simple strategies you can follow in your code to ensure your program is robust and easy to debug.
https://earthly.dev/blog/golang-errors/
Earthly Blog
Effective Error Handling in Golang
Learn how to effectively handle errors in Go with this informative article. Discover the basics of error handling in Go, strategies for robust code...
π178β€37π©18π8π€6π₯2π1
User or *User - Do We Need Struct Pointers Everywhere?
The answer, as you mightβve guessed, is βno.β But, itβs also more nuanced due to the lifetime of a struct, its usage, and other aspects that boil this down to general guidelines and case-by-case analysis.
https://preslav.me/2023/02/06/golang-do-we-need-struct-pointers-everywhere/
The answer, as you mightβve guessed, is βno.β But, itβs also more nuanced due to the lifetime of a struct, its usage, and other aspects that boil this down to general guidelines and case-by-case analysis.
https://preslav.me/2023/02/06/golang-do-we-need-struct-pointers-everywhere/
Preslav Rachev
User or *User - Do We Need Struct Pointers Everywhere?
A bit of up-front thinking can help make our Go code cleaner and more performant.
π133β€20π₯12π€7π5
This media is not supported in your browser
VIEW IN TELEGRAM
Memory leaks can be a significant issue in any programming language, and Go is no exception. Despite being a garbage-collected language, Go is still susceptible to memory leaks, which can lead to performance degradation and cause your operating system to run out of memory.
To defend itself, the Linux operating system implements an Out-of-Memory (OOM) killer that identifies and terminates processes that consume too much memory and cause the system to become unresponsive.
In this blog post, weβll explore the most common causes of memory leaks in Go and demonstrate how to use Grafana Pyroscope, an open source continuous profiling solution, to find and fix these leaks.
https://grafana.com/blog/2023/04/19/how-to-troubleshoot-memory-leaks-in-go-with-grafana-pyroscope/
To defend itself, the Linux operating system implements an Out-of-Memory (OOM) killer that identifies and terminates processes that consume too much memory and cause the system to become unresponsive.
In this blog post, weβll explore the most common causes of memory leaks in Go and demonstrate how to use Grafana Pyroscope, an open source continuous profiling solution, to find and fix these leaks.
https://grafana.com/blog/2023/04/19/how-to-troubleshoot-memory-leaks-in-go-with-grafana-pyroscope/
π154β€35π€17π©11π₯7π€―6
Go Sync or Go Home: WaitGroup
Goβs goroutines, channels, and mutexes make it easy to develop complex concurrency systems. Most problems can be solved using these three mechanisms, but you might be asking yourself β what else is out there?
https://medium.com/@yardenlaif/go-sync-or-go-home-waitgroup-5f074a03776e
Goβs goroutines, channels, and mutexes make it easy to develop complex concurrency systems. Most problems can be solved using these three mechanisms, but you might be asking yourself β what else is out there?
https://medium.com/@yardenlaif/go-sync-or-go-home-waitgroup-5f074a03776e
Medium
Go Sync or Go Home: WaitGroup
What does WaitGroup have that channels donβt?
β€71π40π€8π7π€―2
Logging in Go: A Comparison of the Top 8 Libraries
There's probably a 99% chance that if you're logging in Go, you're using a third-party logging framework since the built-in log package lacks even the most basic features required for production logging. This recently changed with the release of Go 1.21 where the new log/slog package for structured, leveled, and context-aware logging was one of the major highlights.
https://betterstack.com/community/guides/logging/best-golang-logging-libraries/
There's probably a 99% chance that if you're logging in Go, you're using a third-party logging framework since the built-in log package lacks even the most basic features required for production logging. This recently changed with the release of Go 1.21 where the new log/slog package for structured, leveled, and context-aware logging was one of the major highlights.
https://betterstack.com/community/guides/logging/best-golang-logging-libraries/
Betterstack
Logging in Go: A Comparison of the Top 9 Libraries | Better Stack Community
This article compares 9 Go logging libraries, discussing and comparing their features, performance, pros and cons, to determine which library is right for you
π104β€32π17π₯3
https://threedots.tech/post/making-games-in-go/
MiΕosz uses the much loved Ebitengine to create a simple Asteroids game. Thereβs a lot to cover, but the steps are small and easy to digest if youβre looking to understand how games are made.
MiΕosz uses the much loved Ebitengine to create a simple Asteroids game. Thereβs a lot to cover, but the steps are small and easy to digest if youβre looking to understand how games are made.
threedots.tech
Making Games in Go for Absolute Beginners
Want to rekindle your passion for coding? Learn how to create video games from scratch using Go and Ebitengine. We break down core concepts like game loops, sprites, and collisions that we've applied in multiple projects. In just one evening, you'll buildβ¦
π48β€14π₯8π€3
Initial Thoughts on Go 1.22 β 1.22 is due next month, but the release candidate gives us a look at plenty of changes and improvements coming down the pike, including new default behavior for loop variables in for loops, the βrangefuncβ experiment (more on that next), and even some performance improvements.
https://www.dolthub.com/blog/2024-01-12-golang-1-22rc/
https://www.dolthub.com/blog/2024-01-12-golang-1-22rc/
π₯77β€26π22π€―7π6
The Impact of Pre-Allocating Slice Memory on Performance β The author wanted to establish, in numbers, how pre-allocating memory improves performance using quantitative measurements and tools for automated detection.
Oilbeater's Study Room
The Impact of Pre-allocating Slice Memory on Performance in Golang | Oilbeater's Study Room
β€50π25π4π₯3π2π€1
Mastering Maps in Go: Everything You Need to Know
Maps, also known as associative arrays or hash tables, are vital data structures for solving algorithmic problems in programming. Understanding their features, operations, time and space complexities, and implementation in code is crucial for developers. With this knowledge and practical experience, developers can effectively apply maps to problem-solving scenarios.
This article offers a comprehensive guide to using maps, covering their overview, implementation in Go programming, and strategies for using them in concurrent code.
Maps, also known as associative arrays or hash tables, are vital data structures for solving algorithmic problems in programming. Understanding their features, operations, time and space complexities, and implementation in code is crucial for developers. With this knowledge and practical experience, developers can effectively apply maps to problem-solving scenarios.
This article offers a comprehensive guide to using maps, covering their overview, implementation in Go programming, and strategies for using them in concurrent code.
Hackernoon
Mastering Maps in Go: Everything You Need to Know | HackerNoon
Learn about using maps in Go (golang), including associative arrays, hash maps, collision handling, and sync.Map, with practical code examples.
β€41π16π₯5π€―4π3π2
https://go.dev/blog/chacha8rand
Explore the recent advancements in randomness within the Go programming language. Authors Russ Cox and Filippo Valsorda, part of the Go team, look closely at the complexities of addressing security requirements for specific use cases and the implementation of the ChaCha(Rand8) algorithm. Discover how these improvements have enhanced random number generation in Go, culminating in the seamless security enhancements introduced in Go 1.22.
Explore the recent advancements in randomness within the Go programming language. Authors Russ Cox and Filippo Valsorda, part of the Go team, look closely at the complexities of addressing security requirements for specific use cases and the implementation of the ChaCha(Rand8) algorithm. Discover how these improvements have enhanced random number generation in Go, culminating in the seamless security enhancements introduced in Go 1.22.
go.dev
Secure Randomness in Go 1.22 - The Go Programming Language
ChaCha8Rand is a new cryptographically secure pseudorandom number generator used in Go 1.22.
π38π₯11β€5π2
"ok" considered harmful?
βJust like thereβs an unwritten law that every error variable in Go must be named err, thereβs an unwritten law that every map existence variable in Go must be named ok.β
But Zach thinks we can, and should, look at doing better.
https://www.dolthub.com/blog/2024-05-10-ok-considered-harmful/
βJust like thereβs an unwritten law that every error variable in Go must be named err, thereβs an unwritten law that every map existence variable in Go must be named ok.β
But Zach thinks we can, and should, look at doing better.
https://www.dolthub.com/blog/2024-05-10-ok-considered-harmful/
π96π39π€22π©6β€3π€―3π₯2
Okay based on the first reactions it seemed like the naming convention issue brought by Zach didn't get much reflection in you.
In this case, I'd like to share a more practical guidance I used recently when had to test a k8s operator setup locally.
The topic is:
Go: Testing Kubernetes Applications with EnvTest
Enjoy π
https://blog.marcnuri.com/go-testing-kubernetes-applications-envtest
In this case, I'd like to share a more practical guidance I used recently when had to test a k8s operator setup locally.
The topic is:
Go: Testing Kubernetes Applications with EnvTest
Enjoy π
https://blog.marcnuri.com/go-testing-kubernetes-applications-envtest
www.marcnuri.com
How to Test Kubernetes Applications in Go with EnvTest: A Practical Guide - Marc Nuri
Learn how to streamline integration testing for your Kubernetes operators and controllers using the EnvTest package from controller-runtime.
π₯35π14β€7π2π€―1
Profile-guided optimisation (PGO) is a technique where CPU profile data for an application is collected and fed back into the next compiler build of Go application. The compiler then uses this CPU profile data to optimise the performance of that build by around 2-14% currently (future releases could likely improve this figure further).
In this article, the Grab tech folks show off their wins and learnings, along with the Dockerfile used to make it happen.
https://engineering.grab.com/profile-guided-optimisation
Enjoy!
In this article, the Grab tech folks show off their wins and learnings, along with the Dockerfile used to make it happen.
https://engineering.grab.com/profile-guided-optimisation
Enjoy!
β€47π30π₯7π1
If you use
Let's see what the problem might be and how to work around it.
https://antonz.org/timer-reset/
Timer.Reset() in Go 1.22 or earlier, you may be doing it wrong. Even the book 100 Go Mistakes (which is usually right about Go nuances) got it wrong.Let's see what the problem might be and how to work around it.
https://antonz.org/timer-reset/
antonz.org
Resetting timers in Go
Chances are you are doing it wrong.
π€―49π34β€7π₯7π€7π5
The standard library of Go 1.23 now includes the new unique package. The purpose behind this package is to enable the canonicalization of comparable values. In other words, this package lets you deduplicate values so that they point to a single, canonical, unique copy, while efficiently managing the canonical copies under the hood. You might be familiar with this concept already, called βinterningβ.
Letβs dive in to see how it works, and why itβs useful.
https://go.dev/blog/unique
Letβs dive in to see how it works, and why itβs useful.
https://go.dev/blog/unique
go.dev
New unique package - The Go Programming Language
New package for interning in Go 1.23.
π₯64β€19π13π8
Go sync.Map: The Right Tool for the Right Job
In Go, sync.Map offers a thread-safe alternative to traditional maps. While sync.Map can be highly effective in scenarios involving heavy concurrent access, it isn't always the best choice. In this article by VictoriaMetrics, you'll learn when to opt for sync.Map, how it differs from regular maps, and the performance trade-offs involved.
https://victoriametrics.com/blog/go-sync-map/index.html
In Go, sync.Map offers a thread-safe alternative to traditional maps. While sync.Map can be highly effective in scenarios involving heavy concurrent access, it isn't always the best choice. In this article by VictoriaMetrics, you'll learn when to opt for sync.Map, how it differs from regular maps, and the performance trade-offs involved.
https://victoriametrics.com/blog/go-sync-map/index.html
VictoriaMetrics
Go sync.Map: The Right Tool for the Right Job
Goβs sync.Map isnβt a magic bullet for all concurrent map needs. Itβs got some good tricks up its sleeve, like handling reads without locking, but itβs not always the best choice. This article dives into how sync.Map works under the hood, from its two-mapβ¦
π33π14β€8