Limit goroutines with buffered channels
https://rednafi.com/go/limit_goroutines_with_buffered_channels/
  
  https://rednafi.com/go/limit_goroutines_with_buffered_channels/
Redowan's Reflections
  
  Limit goroutines with buffered channels
  I was cobbling together a long-running Go script to send webhook messages to a system when
some events occur. The initial script would continuously poll a Kafka topic for events and
spawn new goroutines to make HTTP requests to the destination. This had twoβ¦
some events occur. The initial script would continuously poll a Kafka topic for events and
spawn new goroutines to make HTTP requests to the destination. This had twoβ¦
π€2
  "I thought I understood how iteration over an array works but apparently not in Golang"
https://medium.com/@haaawk/i-thought-i-understood-how-iteration-over-an-array-works-but-apparently-not-in-golang-441a7abd6540
  
  https://medium.com/@haaawk/i-thought-i-understood-how-iteration-over-an-array-works-but-apparently-not-in-golang-441a7abd6540
Medium
  
  I thought I understood how iteration over an array works but apparently not in Golang
  Iβve recently learned about a surprising Golang behavior. You can significantly speed up the iteration over an array by doing:
π2π€―2
  Finally we can use it without many lines of 
Tl;dr:
With all that out the way, we can use a heredoc, executing two commands in the same RUN!:
->
https://www.docker.com/blog/introduction-to-heredocs-in-dockerfiles/
  
  / and && Tl;dr:
With all that out the way, we can use a heredoc, executing two commands in the same RUN!:
RUN <<EOF
echo "Hello" >> /hello
echo "World!" >> /hello
EOF
->
https://www.docker.com/blog/introduction-to-heredocs-in-dockerfiles/
Docker
  
  Introduction to heredocs in Dockerfiles | Docker
  Learn from Docker experts to simplify and advance your app development and management with Docker. Stay up to date on Docker events and new version
π₯11π1
  Slides of my talk from #kcdaustria about debugging #golang apps inside #k8s cluster
https://drive.google.com/file/d/1-6ERQda23o7OiLHziz4wwgvdFWS0kyv8/view
And repo with samples/Dockerfiles for try it out!
https://github.com/andriisoldatenko/debugging-containerized-go-applications
  
  https://drive.google.com/file/d/1-6ERQda23o7OiLHziz4wwgvdFWS0kyv8/view
And repo with samples/Dockerfiles for try it out!
https://github.com/andriisoldatenko/debugging-containerized-go-applications
GitHub
  
  GitHub - andriisoldatenko/debugging-containerized-go-applications: Different debug examples for dockerized Go application
  Different debug examples for dockerized Go application - andriisoldatenko/debugging-containerized-go-applications
π₯9π1
  Discussion of 1BRC in Go https://github.com/gunnarmorling/1brc/discussions/67
Context: https://twitter.com/gunnarmorling posted a problem https://www.morling.dev/blog/one-billion-row-challenge/ the idea is pretty simple and from another side not so simple:
>write a Java program for retrieving temperature measurement values from a text file and calculating the min, mean, and max temperature per weather station. Thereβs just one caveat: the file has 1,000,000,000 rows!
  
  Context: https://twitter.com/gunnarmorling posted a problem https://www.morling.dev/blog/one-billion-row-challenge/ the idea is pretty simple and from another side not so simple:
>write a Java program for retrieving temperature measurement values from a text file and calculating the min, mean, and max temperature per weather station. Thereβs just one caveat: the file has 1,000,000,000 rows!
GitHub
  
  1BRC in Go Β· gunnarmorling/1brc Β· Discussion #67
  Completes in ~20s on my machine, see https://github.com/AlexanderYastrebov/1brc/tree/go-implementation/src/main/go ~$ go version go version go1.21.4 linux/amd64 ~$ uname -r 4.15.0-213-generic ~$ ca...
π2
  Goβs CompareAndSwap is not always Compare-and-swap
>Go's standard package sync/atomics provides programmers with functions to use the underlying CPU-level atomic operations such as compare-and-swap (CAS), through atomic.CompareAndSwapT (where T is an integer type).
> Problem: Not all CPU architectures offers a CAS instruction to rely on to implement atomic.CompareAndSwapT. However, Go must compile that function code to something semantically equivalentβlet's see what.
https://lu.sagebl.eu/notes/go-cas/
  >Go's standard package sync/atomics provides programmers with functions to use the underlying CPU-level atomic operations such as compare-and-swap (CAS), through atomic.CompareAndSwapT (where T is an integer type).
> Problem: Not all CPU architectures offers a CAS instruction to rely on to implement atomic.CompareAndSwapT. However, Go must compile that function code to something semantically equivalentβlet's see what.
https://lu.sagebl.eu/notes/go-cas/
Forwarded from πΊπ¦ Go performance channel (Oleg)
Hiring Challenge: Smallest #golang Websocket Client
https://dyte.io/blog/hiring-challenge-smallest-golang-websocket-client/ by @dyte_io
  
  https://dyte.io/blog/hiring-challenge-smallest-golang-websocket-client/ by @dyte_io
Dyte
  
  Hiring Challenge: Smallest golang Websocket Client
  Learn to create a compact Go program for a websocket server, optimizing the binary size. Insights from a Dyte hiring challenge.
π₯5β€1
  Collections what's new in Go 1.22:
- slices.Concat https://blog.carlana.net/post/2024/golang-slices-concat/
- reflect.TypeFor https://blog.carlana.net/post/2024/golang-reflect-type-for/
- https://pkg.go.dev/cmp#Or
- https://pkg.go.dev/net/http@master#FileServerFS
- https://pkg.go.dev/database/sql#Null
- slices.Concat https://blog.carlana.net/post/2024/golang-slices-concat/
- reflect.TypeFor https://blog.carlana.net/post/2024/golang-reflect-type-for/
- https://pkg.go.dev/cmp#Or
- https://pkg.go.dev/net/http@master#FileServerFS
- https://pkg.go.dev/database/sql#Null
π8β€1
  TIL: a % 128 = 0 is the same as a & 127 = 0
'Which is a faster operation since it just requires doing the AND and not the whole division and remainder comparison' @jesusvazquezp
from https://github.com/prometheus/prometheus/pull/14118#pullrequestreview-2068077407
  
  'Which is a faster operation since it just requires doing the AND and not the whole division and remainder comparison' @jesusvazquezp
from https://github.com/prometheus/prometheus/pull/14118#pullrequestreview-2068077407
GitHub
  
  Check context every 128 labels instead of 100 by colega Β· Pull Request #14118 Β· prometheus/prometheus
  Follow up on #14096
As promised, I bring a benchmark, which shows a very small improvement if context is checked every 128 iterations of label instead of every 100.
It's much easier for a compu...
As promised, I bring a benchmark, which shows a very small improvement if context is checked every 128 iterations of label instead of every 100.
It's much easier for a compu...
π4π’1
  How do you track code coverage for OSS projects?
codecov seems very flaky, (will provide some details in thread)
wdyt about https://github.com/vladopajic/go-test-coverage?tab=readme-ov-file
  
  codecov seems very flaky, (will provide some details in thread)
wdyt about https://github.com/vladopajic/go-test-coverage?tab=readme-ov-file
GitHub
  
  GitHub - vladopajic/go-test-coverage: go-test-coverage is a tool designed to report issues when test coverage falls below a specifiedβ¦
  go-test-coverage is a tool designed to report issues when test coverage falls below a specified threshold - vladopajic/go-test-coverage
π1
  https://tip.golang.org/doc/go1.23#iterators uhhhh ππππ
  
  tip.golang.org
  
  Go 1.23 Release Notes - The Go Programming Language
  
π₯7π€1
  For all GO haters :) https://juli1.substack.com/p/why-i-fell-in-love-with-go
Nice quote and summary:
>Technologies like JavaScript or Go are like a good burger: itβs an option that the majority understand and choose regularly. It may not be the most elegant option, but it does the job and allows us to focus on problems that matter.
  
  Nice quote and summary:
>Technologies like JavaScript or Go are like a good burger: itβs an option that the majority understand and choose regularly. It may not be the most elegant option, but it does the job and allows us to focus on problems that matter.
Substack
  
  Why I fell in love with Go
  When I was still young in my career, I was obsessed with niche-languages mentioned in big stories on Hackernews.
π8π1
  What do you think if I start posting not only about Golang, but some related topics like k8s/containers?
  Anonymous Poll
    50%
    Yes
      
    20%
    No
      
    16%
    Strong Yes
      
    13%
    i don't care
      
    π₯3π¦3π‘2π1
  _4chan := make(chan chan chan chan int)
π π π
https://www.dolthub.com/blog/2024-08-23-the-4-chan-go-programmer/
Dolthub
  
  The 4-chan Go programmer
  A very silly concurrency exercise in using Go channels that send channels that send channels that send channels.
π€£21π€―5π₯1
  Old but still worth to read about why one shouldn;t defer Close() on writable files:
https://www.joeshaw.org/dont-defer-close-on-writable-files/
  
  https://www.joeshaw.org/dont-defer-close-on-writable-files/
joe shaw
  
  Don't defer Close() on writable files
  It'll bite you some day
  Some pitfalls about generating Kubernetes Custom Resources with `controller-gen` over the years, and how to do more rigid validation and defaulting with it:
https://ahmet.im/blog/crd-generation-pitfalls/
  
  https://ahmet.im/blog/crd-generation-pitfalls/
Ahmet Alp Balkan
  
  Kubernetes CRD generation pitfalls
  A quick code search query reveals at least 7,000 Kubernetes Custom Resource Definitions in the open source corpus,1 most of which are likely generated with controller-gen βa tool that turns Go structs with comments-based markers into Kubernetes CRD...
  Providing context to cancellations in Go 1.20 with the new context WithCause API
https://josephwoodward.co.uk/2023/01/context-cancellation-cause-with-cancel-cause
and proposal https://github.com/golang/go/issues/51365
  
  https://josephwoodward.co.uk/2023/01/context-cancellation-cause-with-cancel-cause
and proposal https://github.com/golang/go/issues/51365
Joseph Woodward's Blog
  
  Providing context to cancellations in Go 1.20 with the new context WithCause API
  
π6π€1
  