Michele Caci
Posted on July 17, 2023
Because if there has been a bin-go, there can be a go-cus (or a focus on Go).
Some time has passed since GopherConEU 2023, held in June 27th to 29th, and I wish to take this occasion to share with you my experience of these amazing days and my thoughts about the areas where Go has shown to focus more using the content of what was shared in the various talks and the chatter with the various Gophers.
TL;DR: GopherConEU is one of the best places to have an idea of what is going on about Go, especially going in person, as this makes you learn not only from the content of the conference but also from meeting and talking to the Gophers around you.
An overview
For those who don't know yet what GopherConEU is, it is the European conference for all topics related to Go.
Every edition of GopherConEU, this being the 6th, has been organized in a different location, but since last year it was localized in Berlin at the Festsaal Kreuzberg.
For GopherConEU 2023 I was able to participate to the workshop and the two days of talks. I was not able to arrive in time to join the social events at the beginning of the talk but it did not prevent me to meet very nice people during the conference days. I sure felt the friendly atmosphere that sourrounds the Go community during the conference and everyone was eager to meet and to exchange not only about Go but also their passions and interests.
To share my experience and my idea of what stood out during the GopherConEU this year, I'm going to focus on some specific topics:
- A focus on the Go community
- Go-ing to next level
- The importance of security
A focus on the Go community
Go is primarily made by the Go team. During GopherConEU this sear there were several talks from the Go team members and other Google software engineers who made some highlights about few new features and tools, like the talks of Jonathan Amsterdam about the new slog package coming in go v1.21, the one about service weaver, made by Robert Grandl, a framework recently released by Google to be able to modularize a Go binary into services that can be easily deployed as microservices and the lightning talk from Robert Burke who made me excited to go get go version v1.21 and experiment the updates on generics.
But what stood out the most during these three days was the fact that the community itself is growing more and more, adopting Go to experiment and create all sorts of applications and pacakges and, most of all, sharing its experiences with the rest of the community.
This was highlighted not only by the keynote given by Cameron Balahan, the product lead of Go, about the state of Go, but also on the concrete examples of some on the talks given during the conference.
Take for example the talk about the tips to reduce memory consumption on Go by Yiscah Levy Silas where she shared her experience about memory allocations and exploit this knowledge to make the right choices and reduce the memory footprint of your applications. In another example you can take the talk from Drishti Jain where she explained which libraries and concepts we need to know to develop a 2D Game in Go, which, by the way, I agree with her that is a fun way to learn Go. In fact, I actually started a long time ago a very small console game wallrush, with the excuse of practising Go with a fun project.
There are so many other things I could mention but this could get extremely long, so we'll move to the next topic, but not before a quick mention to the TinyGlobo 2 launch.
Go-ing to next level
This topic is the trickiest to describe but I'll make my best to convey what I took out from this with these two examples.
The first one is related to the workshop of Bill Kennedy about Ultimate Services in Kubernetes where he shared several tips and trick to both create an application and deploy it in Kubernetes and to take well known Go concepts and take them to the next level.
Some of these ideas are the following:
- Have a deploy-first mentality: prepare your deployment with all the configuration you need and a minimal code to support it. Once your minimal application is deployed in the cluster you can concentrate on the business logic
- Think about the package as an API, which creates firewalls between code sections as it can only be accessed via its exported symbols. Also if a package is an API, it serves by providing functionalities, not by containing them, which is a very important distinction between a functional package and a package that just serves as a bin containing things we might forget
- Start by accepting data for what it is and then discover what it does (concrete type vs interface).
- Consider that errors are handled when acknowledged or treated in some way, for example by logging them. Once handled, the error should not be propagated any further.
- Prefer to not deal with errors inside an
http.Handler
but make sure that you create an Handler with a function that returns an error so that it can be handled in every situation, e.g. by defining atype Handler func(ctx context.Context, w http.ResponseWriter, r *http.Request) error
These are just few examples where I noticed something clicking in my head, I really tried to see through the examples given during the workshop and I'm convinced that I need to give a try myself to understand it better and assimilate these concepts as well.
The second example, I think of, is the talk done by Julien Cretel about how to create and use functional options during the creation of values from a structure. This idea is not new because it exploits a lot the concept in Go of functions as first class citizens, but it is also not easy to put in place as it requires some understanding in how to use functions to configure the values of a field. The fact of going from func New(/* parameters with values to assign to MyStruct fields*/) *MyStruct
to func New(opts ...func(*MyStruct)) *MyStruct
is just the first step to help create values in a cleaner way that goes beyond simple "Constructor functions" or "Configuration structures". In his talk, however Julien didn't just explain how to create functional options but also when and how to use them to make sure that we can get the best of their implementation.
The importance of security
Security is one of the pillar of today's focus when developping an application, as more often than not, attacks uncover the vulnerabilities that affect it or the libraries on which it depends on.
Go is not undervaluing the security efforts and this was highlighted in both keynotes: the aformentioned one by Cameron Balahan about the the state of Go and the one focusing on vulnerability management in Go by Julie Qiu.
If we focus first on the keynote from Julie Qiu, the manager of the security team in Go, it was important to hear about the meaning of vulnerability and how they can affect the supply chain (by actually using a very tasty cake analogy 😄🍰). To address this the go team worked on several layers:
- tooling
- data
- documentation
The tooling has seen the introduction of the vulncheck
command, just recently released, that helps to identify security issues inside the dependencies of a Go module with an effort to reduce the noise and convey only the important information in order to fix the most urgent security issue. The vulncheck tool also sees it's first integration int he CI thanks to the appropriate Github Action that has been implemented to include it in a CI build for a Go application.
The data is taken care thanks to the vulnerability database, which provides a comprehensive source of information about known vulnerabilities in public Go modules, which in turn are shown in the documentation that will display a sign if there has been a vulnerability detected inside the package page in .
These information go to support the story behind the state of Go which is not just a language that is growing with time but also a full consolidating ecosystem that is designed to be a productive and production-ready platform. For this reason it is not only important that Go is easy to learn to get onboarded, but also that it comes with its own tools to perform many operations, like testing, benchmarks, module management, fuzzing and vulnerability checking (to name a few) that make the base for the creation of stable, secure, reliable and efficient applications with Go.
A personal note
GopherConEU 2023 was not just for me a place where I heard interesting talks and topics about my favorite programming language.
It was for sure an occasion to meet a lot of nice Gophers, old and new, chat with them and share our experiences. Be it with the Go team or with the other Gophers it was nice to share my projects like wallrush and the Go workshop I presented at RivieraDEV or my experience to help the organization of RivieraDEV and at the same time hear about the others and see what they were working on both on the professional side and on the free time.
Speaking of personal projects one stood out during the conference and it was gopherconeu23img. Why was it so special? It's because, it's a CLI, totally written in Go, that creates GIFs in ASCII art from an input text and, most importantly, it was used to create some of the GIFs that were included in the slides of this year's edition of GopherConEU. 😍
Here are some examples:
Another thing I want to mention is Giuseppe Scaramuzzino's lightning talk Unleashing Desktop App Development with Go and Fyne which was great, informative and very well received by the audience. I'm proud he was selected to perform his talk and to have played a small part on his decision to submit this talk. Great job! 😎
Parting thoughts
The idea of this article was not to be exactly a report on the talks of GopherConEU 2023 as there are some good reports out there that highlight well the content of the talks. The idea was to highlight some thoughts on the state of Go and its community after meeting all the Gophers in person and hearing the content of the talks proposed during the conference.
It's a bit of a pity that I might not be able to attend to the other editions of GopherCon (a baby 👶 is coming, so unless I'm talking I prefer to attend remotely where possible) this year but I hope that these thoughts will be confirmed and some new ones will get the spotlight.
GopherCon EU was not just an occasion for sharing and learning, it was also a moment of distention and entertainement, I'm thinking especially of the social mixer after the first day of conference and the live episode of Go Time podcast with a session of the "Gopher Say" quiz game. If you haven't had the chance to participate, the talks will be made available in YouTube, so at some point you'll be able to access the content as well.
I will close again by thanking everyone that made this edition of GopherConEU and sharing some more pictures of this two days marathon.
You can find me up on linkedin, github and twitter at @goMicheleCaci or here on dev.to @mcaci and I'm looking forward to hearing your comments.
This was Michele and thanks for reading!
Posted on July 17, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.