A Go-cus after GopherConEU 2023
Tags: go, gophercon
Published: 2023-07-17 07:15:47

---
title: A Go-cus after GopherConEU 2023
published: true
description: A focus on Go after GopherConEU23
tags: go, golang, gophercon
cover_image: ![GopherConEU23](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j3bf1mjapdr5xdlaz78h.png)
# Use a ratio of 100:42 for best results.
# published_at: 2023-07-15 20:46 +0000
---
![GopherConEU23](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j3bf1mjapdr5xdlaz78h.png)
Because if there has been a [bin-go](https://twitter.com/gopherconeu/status/1674036578962776068/photo/1), 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

![Welcome back](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mfj9qmqoc41ywgls99zw.jpeg)
<figcaption align = "center"><b>Welcome back</b></figcaption>

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](https://tip.golang.org/doc/go1.21#language) 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](https://github.com/mcaci/wallrush), with the excuse of practising Go with a fun project.

![Drishti Jain on how to develop a 2D Game in Go](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k5ilb8ymggypv4tg9y0o.jpeg)
<figcaption align = "center"><b>Drishti Jain on how to develop a 2D Game in Go</b></figcaption>

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](https://twitter.com/deadprogram/status/1674002660016500736).

## 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 a `type Handler func(ctx context.Context, w http.ResponseWriter, r *http.Request) error`

![Bill Kennedy at the Ultimate Services workshop](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gw8r1r4w4g9znsgahbrj.jpeg)
<figcaption align = "center"><b>Bill Kennedy at the Ultimate Services workshop</b></figcaption>

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](https://twitter.com/golang/status/1679528457846378496) 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](https://vuln.go.dev), 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 <pkg.go.dev>.

![Julie Qiu on how to manage vulnerabilities](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0rn2rf8smw37pcpttb4z.jpeg)
<figcaption align = "center"><b>Julie Qiu on how to manage vulnerabilities</b></figcaption>

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](https://github.com/mcaci/wallrush) and the Go [workshop](https://github.com/mcaci/lets-go-workshop) I presented at [RivieraDEV](https://rivieradev.fr/) 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](https://github.com/mcaci/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:

- [Welcome Back](https://twitter.com/carstencodes/status/1674328086509154305)
- [Lunch Break](https://twitter.com/AleInTech/status/1674040288145207308)
- [The Lunch Break gif in action](https://twitter.com/goMicheleCaci/status/1680272723694551040)

Another thing I want to mention is __Giuseppe Scaramuzzino__'s [lightning talk](https://twitter.com/webdeva/status/1674412124427149312) __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! 😎

![Giuseppe's Lightning talk about Fyne](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1coq52oqymhlkzolko0f.jpeg)
<figcaption align = "center"><b>Giuseppe's Lightning talk about Fyne</b></figcaption>

## 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](https://www.linkedin.com/in/michele-caci-47770132/), [github](github.com/mcaci) and twitter at [@goMicheleCaci](twitter.com/goMicheleCaci) or here on dev.to @mcaci and I'm looking forward to hearing your comments.

__This was Michele and thanks for reading!__

![The queue for the workshop day](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tuo3tnhk5luy8r1wf1i9.jpeg)
<figcaption align = "center"><b>The queue for the workshop day</b></figcaption>
![Panel with the Go team](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2oju7o1c20dee76jsyu2.jpeg)
<figcaption align = "center"><b>Panel with the Go team</b></figcaption>
![Some of the GopherConEU Swag](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tkkh34sm88rt9pd7o9bc.jpeg)
<figcaption align = "center"><b>Some of the GopherConEU Swag</b></figcaption>