47 avsnitt • Längd: 30 min • Månadsvis
15 minutes news, tips, and tricks on the Go programming language.
The podcast go podcast() is created by Dominic St-Pierre. The podcast and the artwork on this page are embedded on this page using the public podcast feed (RSS).
This week I talk with Andy Williams about the Fyne toolkit. It's impressive how much you can do with Fyne targeting mostly all platform where you'd want your application to run. In a world where web is getting a little bit out of hand, it's refreshing to see that desktop still have its place in the software world.
Links:
Join us on #gopodcast in the Gophers Slack. Any mention of this podcast would be extremely appreciated. To support the effort of running the pod you can purchase my courses at 50% off for listeners: Build SaaS apps in Go and Build a Google Analytics in Go.
John is proposing learning Rust to enhance Gophers programming knowledge. I do enjoy learning new thing personally, Rust always has been or at least seems to required an extra effort to get started with. John is trying to make it more approachable.
Links:
If you enjoy the show the best way to support it is by sharing and talking about it to your circle and if you can by purchasing my courses (50% off for listeners of this show). Build SaaS apps in Go and Build a Google Analytics in Go.
This week I'm joined by Markus Wustenberg, the author of Gomponent, a library that lets you write your HTML directly in Go using a component approach with type safety.
Links:
There's a channel in the Gophers slack community, join #gopodcast.
If you'd want to support the show consider purchasing my Go courses, which are 50% off for listeners of this show. Build SaaS apps in Go and Build a Google Analytics in Go.
After last episode with Templ maintainers I was really pumped to try Templ and see if it would work for me. Without spoiling too much I believe it would have been easier to start from scratch with Templ vs. trying to migrate an existing project.
This led me to try and see if I could add static analysis of my templates in my library tpl. I don't really have a PoC yet, but kind of getting close to it. If everything continue I should be able to capture errors in using of wrong field in template, like typos in field name that are caught at runtime at this moment.
Links: https://github.com/dstpierre/tpl
Also if you want to support this show, this is a 50% discount on my courses: Build SaaS apps in Go and Build a Google Analytics in Go.
In this episode Adrian Hesketh and Joe Davidson from Templ joins me and we talk about the what, why, and how of Templ. If you haven't checked it out, Templ helps creating strongly typed html template and use a component based approach to building web interface in Go.
Links:
As always if you want to support the time I invest into this podcast the best way is by purchasing my courses which are at 50% off for listener of this pod: Build SaaS apps in Go and Build a Google Analytics in Go.
Ramesh joins me this week to talk about his experiences teaching programming in Girls who code club and gate keeping that can discourage some people from choosing computer science as their career path.
Links:
I'd appreciate any mention you can share about the pod. If you'd like to support the effort, the best way if to purchase my courses, listeners of the show get 50% off Build SaaS apps in Go and Build a Google Analytics in Go.
Getting out there, showing what you're currently doing / learning, starting a blog, creating content to help other software engineers, those are all good way to distinguish yourself. You might want to consider speaking at conferences as well. In this episode we're talking with Matt Boyle about the what, why, how of getting your first conference talk accepted.
Links:
As always I'd appreciate if you can talk about the pod, share a link, add a review. If you want to support the efforts the best way is to purchase my courses: Build SaaS apps in Go and Build a Google Analytics in Go.
I'm joined by Marian Montagnino this week. We talk about CLI in Go, programming languages. Java and Elm mentioned, be warned .;) and other tech related stuff. Marian wrote a book on building CLI in Go and presented multiple talks at Go conferences.
We had some connectivity glitches during our call making it challenging. You won't here the internet cuts as we did, but the lag is real, sorry about that.
Links:
As always I'd highly appreciate any mention of the pod and if you want to support the show the best way is to grab my courses at 50% off for listeners of the show: Build SaaS apps in Go and Build a Google Analytics in Go
I started a monolith-style web application couple of weeks ago and force to admit that Go is more and more fun to use where I was considering more like Django or Rails before.
For me there was still the templates aspect that needed to be fixed, and I wrote a library for that. The other major place where I was not enjoying myself was the database code, found it way to repetitive for application that had a lot of SQL tables.
We're in a very good place at the moment and the benefits of having a compiled language to build heavy backend web application is great.
Links:
As always if you want to support the show you may purchase my courses Build SaaS apps in Go and Build a Google Analytics in Go.
I've restarted active development on my open source Go backend server API StaticBackend. For a long time I wanted to make its CLI size smaller, and I decided to use Go's plugin package to extract a functionality that used a dependency that was accounting for more than 50% of its 170 MB. Go plugin were the solution I decided to use for this and I explain the problem and the solution in this episode.
Links:
As always it's appreciated if you can talk about the pod and share. You may also purchase my course(s) if you want to contribute with money, there's a 50% off coupon with those links: Build SaaS apps in Go and Build a Google Analytics in Go.
As always
I've been building SaaS since 2008 and built two with Go. Big spoiler, the technology you choose has a little impact in the early stage of a software business. There's some danger to over-engineer and use complex construct while you still does not even know if what you're building is desirable. Heck, you don't even know what you're building at first.
I'm giving some example of common traps and pitfails technical founder tend to fail into when jumping into a startup venture for first times. And yes, times is plural, because it takes multiple attempt before learning lessons.
If you enjoy the pod please consider sharing / talking about it. You may also contribute by purchasing my courses Build SaaS apps in Go and Build a Google Analytics in Go courses, they're at 50% off for listeners of the show.
I'm joined by Mark Carpenter, the maintainer of EbitenUI, a UI library you may use with your Ebitengine Go game. Game dev is slowly making its way to Go with game library like Ebitengine and Raylib. The nice thing about Ebitengine is that it's built in Go, have great cadance in its development and is simple to use.
EbitenUI is a UI library that allows you to build UI for your games. It's a simple library that integrates smoothly with the programming model of Ebitengine games.
Links:
As always if you want to support my efforts with this show please talk about it, share it. You may also purchase my online courses Build SaaS apps in Go and Build a Google Analytics in Go, there's a 50% discount for listeners of this show.
A follow-up episode on last week episode. We go a little bit deeper into Encore with André Eriksson. Encore can do a lot for your Go project and infrastructure. It allows your team to focus on your product and provides local development and DevOps tooling that help your team go faster.
Links:
How to support the show:
This week I'm joined by Bill Kennedy. Bill makes me discover Encore which can handles service-to-service communication while programmers focus on their application. We talk about domain design in Go and how to architect an isolated system following the 3-tier layer design.
Links:
As always if you enjoy the show consider sharing it / talking about it. If you'd want to support the effort the best way is by purchasing my courses, Build SaaS apps in Go and Build a Google Analytics in Go. Those links have a 50% discount coupon applied to them for listeners of the show.
My upcoming SaaS product at first wasn't suppose to be rolled out as a product, but was for my own usage. Turns out as I was using it and selling my online courses that it appears to me as being fairly usefull and could compete against existing course selling platform.
The hic is that it wasn't built as a SaaS in mind, so I have to deploy one application per customer. It's completely multi-tenant. To help with automating the deployment of a new tenant, I wrote and orchestrator with agents to facilitate the deployment of a new application. I thought this part could be interesting to hear about as it's written in Go.
Want to support the show? The best way is by purchasing my courses Build SaaS apps in Go and Build a Google Analytics in Go. Listeners of this show get a 50% discount on all store product.
In this episode I talk with John Arundel about cryptography in Go. John wrote a great book on the subject called Explore Go: Cryptography.
Security is a growing concerns and you should up your game as a Go programmer. We're lucky to have such a solid crypt package in the standard library. I'd encourage you to get familiar with it if you haven't yet.
Links:
As always, if you want to support this show the best way (other than talking about it) is by purchasing my courses: Build SaaS apps in Go and Build a Google Analytics in Go, here's a 50% direct discount for listeners of this podcast.
In 2021 Twilio sent a termination email on their Fax services. I was consulting as the CTO in a credit bureau that was in the start of an acquisition process with Equifax Canada. There was just no time to "waste" on changing provider and rewriting this part of the system to satisfy the new provider API.
Would have been grand if the provider would have offered a shim that replicated Twilio's API and map that to their own API. Imagine how many companies needed to rewrite this part at the same time. Offering this as the provider that receives X thousands new customers would have been a superb engineering experience.
So maybe we can apply this concept internally as well. When a team needs to introduce breaking changes, a good solution might be for them to provide a shim over the old API so no other teams need to do anything.
This is obviously a tad dangerous and might introduce some technical debt. But as everything, it depends.
I receive Chris Shepherd and we talk about gRPC in Go. If you're building systems with lots of micro-services, gRPC is a good way to provide strong contracts between your services and improve communications.
Links:
The best way to support this show, other than talking about it, is by purchasing my online courses on Go: Build SaaS apps in Go and Build a Google Analytics in Go. Here's a direct link with a special discount for the pod listeners.
This episode was supposed to be focussing on templ, the tempalte library, but as I was going in details I found it hard not to explain the back story of why I started looking for something to help html/template be more "fun" to build rapid side projects, you know, CRUD heavy web application.
Links:
If you'd like to support this show the best way is to puchase my courses, I've one call Build SaaS apps in Go and another one called Build a Google Analytics in Go. Here's a direct discount for listener of this show.
Quick solo episode on TDD and when I experienced it was used best and when I personally not use it but use an approach of writing a bit of code, than tests, thant another bit of code, etc.
Buying my courses is the way to support this show, here's a direct discount for listeners.
I chatted with Matt Boyle about debugging Go code. Matt is creating a course about this topic and discussing debugging as a tool you may add to your toolbelt.
Links
As always, if you'd like to support this podcast the best way is to purchase my courses / talk about them. I have 2 courses on Go and here's a direct discount for podcast listeners.
I believe we can do better regarding software engineer interviews and this entire process (also including onboarding). I think companies that will be mediocre at those two aspects will have a hard time with younger programmers, which I fully support.
Iterators are going to be useful to process large amount of data without having to load an entire slice or maps in memory but instead create iterators that can be used from a for item := range myIterators().
If you'd like to support this show and/or are interested in Go courses I have, here's a direct discount link specially for listeners of this show.
Something absurd happened in 2024 for one of my consulting client's production web application, and this code for a time. The time zero value is behaving differently than it has been since 2018.
Date has a value: No date, zero value
I launched my new course Build a Google Analytics in Go, if you're interested and/or want to support this show that's how to do it.
I react to the post on the Go subreddit of last week talking about a null pointer error occuring in production for a Go program.
This is the YouTube video I made.
If you'd want to support this podcast, I have Go courses available for purchase here, I just launch my latest course Build a Google Analytics in Go with a 50% discount for listener of this show.
Typical reasons to use Go might sounds exciting for us used to Go, but might not be as attractive for people that haven't experienced Go yet and might not realize they have some small heritants that Go fixes/improves.
I've pre-launched my new course call Build a Google Analytics in Go, as listener to this podcast you're getting a 50% off during pre-sale, the course is due to launch before the end of December.
If you want to support this show, purchasing the course is the best way, also talking about it ;).
Things were very different when I started as a junior developer. This is a story of an out of the ordinary day where worked from ~9h am to 11am (the next day), the two of us that were in charge of everything at a small financial company.
This one has nothing to do with Go, but I thought it was worth telling as a story.
I'm soon to launch (pre-launch) my next course Build a Google Analytics in Go. If you're interested make sure to sign-up for the newsletter on my store. https://store.dominicstpierre.com/
As we're building more and more of distributed systems I believe that one trait / culture successful team will require is discipline. Personal opinion, we tend to complicate our lives in the last decade compare to what things were before. But without an extra attention to some details, it will be a nightmare to maintain systems in the long run.
As always, if you'd like to support the show the best way is to purchase my course. Sharing it also very much appreciated.
I talk about dependencies management in Go. How to keep your dependencies up-to-date and how to check if there's any updates available. What to do when a package change their major version.
List all packages and latest versions:
$ go list -m -u all
Update all packages to their latest minor versions:
$ go get -u ./...
If you'd like to support this podcast consider buying a copy of my course Build SaaS apps in Go.
I was toying with the idea of using WebAssembly runner as a plugin / extension mechanism from a Go (host) program to extend the capabilities of a program at runtime.
* min/max bult-ins coming in 1.21: https://tip.golang.org/ref/spec#Min_and_max
* wazero: https://github.com/tetratelabs/wazero
* wasmr: https://github.com/wasmerio/wasmer-go
* StaticBackend: https://github.com/staticbackendhq/core
I'm trying to make my open source backend API project StaticBackend as easy as possible to contribute.
Couple of things I've added lately was worth mentionning. GitHub Codespaces is helpful and nicely done. It goes 1-step further than Docker and make contributing to an open source project a simple task, especially for small and quick 1-time contribution.
This couple with GitHub CLI, which I admit, have just starting using it. And linters to make sure the quality of the code is as high as it can be.
StaticBackend website | GitHub repo
If you'd want to support this podcast, the best way is to talk about it, sponsor my open source project or purchase my course Build SaS apps in Go.
I talk about what I'd love to see coming to web development. While WebAssembly can be used as an alternative to JavaScript, I believe we're not looking into the real problems related to building web application.
It has been a rough last 4 months for me and I finally get a chance to restart publishing episodes.
In this episode I talk a bit about what I've seen so far as process / flow for deploing software in production. Going from the old days when I started as a junior software dev where we were pushing straight into prod to what I discovered at a big organization where putting something in production spread accross multiple days and involves a lot of people.
I'd like to hear how things are working for you, what is your process from bug fix/new feature to production. I'm genuinely curious after the experience I had seeing how thins can be tedious for this process.
This is the last episode of 2022. Those are my thoughts about how I think we should try to help more as user of open source project and librairies.
This episode content was inspired by the Gorilla Web Tool Kit archiving their Go projects.
On that note, I'll be back with more Go content on January, and will try to keep my 1 episode per two weeks plan for 2023.
Thank you!
Go's worker queue pattern:
type WorderPool struct {
queue chan int
}
func (wp *WorkerPool) start() {
for i := 0; i < 500; i++ {
go funcIO {
for id := range wp.queue {
doSomething(id)
}
}()
}
}
func (wp *WorkerPool) add(id int) {
wp.queue <- id
}
Best way to show support for the pod is by sharing it around and buying my course.
Let's talk about Go's concurrency. It's a powerful tool to have at your disposal but a hard one to master and use correctly.
If you want to support the pod the best way is to purchase my course (thanks).
At beginning I was deploying my Go servers to a DigitalOcean droplet. But for the last 3 years I'm enjoying Render, which listen to my git push and automatically deploy app for me in a blue-green deployment.
If you enjoy my podcast have a look at the following:
- Build SaaS apps in Go, my course on building web application in Go
- StaticBackend, an open-source Go backend server API
- @dominicstpierre on Twitter
I recently created an exportable Go package from StaticBackend, an open source backend API which was self-hosted.
I ended up using the internal package way to heavily and this design decision bite me when I decided to create an exportable package. Now all things that needed to be expose that was in the internal package had to be refactored into their own packages.
Links:
Usage of -ldflags:
go build -ldflags "-X main.varName=from_build" -o mycli
Inside your code:
var varName string
func main() {
fmt.Println(varName) // prints "from_build"
}
Here's what I'm using for StaticBackend -v flag:
go build -ldflags \
"-X github.com/staticbackendhq/core/config.BuildTime=$(shell date +'%Y-%m-%d.%H:%M:%S') \
-X github.com/staticbackendhq/core/config.CommitHash=$(shell git log --pretty=format:'%h' -n 1) \
-X github.com/staticbackendhq/core/config.Version=$(shell git describe --tags)" \
-o staticbackend
Links:
If you'd like to join the dev of StaticBackend a Firebase alternative I'm building in Go you're welcome, there's a discord if you'd want to chat. https://github.com/staticbackendhq/core
If you'd like to checkout my course called Build SaaS apps in Go or want to support this show, that's the best way.
If you're on Twitter make sure to follow me: https://twitter.com/dominicstpierre
sqlx: https://github.com/jmoiron/sqlx
sqlboiler: https://github.com/volatiletech/sqlboiler
If you're looking to learn how to build web API with Go, checkout my course on building SaaS in Go.
I've been maintaining 20 years old systems for a long time now. I've been working with legacy applications in .NET. To me Go has some great advantages built-in by design that should help in 10-15 years from now when the applications that are created today will be on maintenance mode.
What are you thinking about Generics? What about 3rd party libraries that will pop from everywhere once Go 1.18 launched?
Personally, I'll appreciate what the std lib offers and will wait before writing generics code, making sure I really need it.
I'm currently working on a free and open-source self-hosted Firebase alternative - if such things sound interesting, please join the Discord group and contribution are very welcome (it's written in Go of course).
This is my course on Building SaaS apps in Go.
If you'd like to check the code, the PR is still active.
StaticBackend repo: https://github.com/staticbackendhq/core
My course on Building SaaS in go
Share episode topic idea with me on Twitter @dominicstpierre
We go over what are pointers and when to use or not use them. For instance, this is probably not a good use for pointers.
func main() {
var i int = 10
abc(&i)
}
func abc(i *int) {
*i = 15
}
In my opinion any dereferencing is probably bad. Better way:
func main() {
var i int = 10
i = abc(i)
}
func abc(i int) int {
return 15
}
I also try to give some basics info regarding the stack and heap and why pointers might not be seen as an optimization.
I have a course on building SaaS in Go.
Don't stress too much about having the "proper" project structure to the point where you might over-engineer or be paralyzed by the thought of doing something wrong.
It's just hard, and even 5+ years of Go experience will not ensure you're creating the optimal packages and structure. It's an art mixed with preferences that become a little easier with time but remain challenging.
I wrote a getting started with Go guide that cover a little about project structure and how to get started with Go.
If you're in writing web applications and maybe even SaaS, I have a course on creating API-first SaaS with Go.
Example of not using the happy path at 1st indentation:
try {An example of happy path in idiomatic Go:
ok, error := hasAccessTo(user, ADMIN)if !somethingElse() {
// handle something else false
}
// Happy path
My course on building SaaS apps in Go.
En liten tjänst av I'm With Friends. Finns även på engelska.