This show is supported by You, Our Listener. Stick around till after the news to hear a little bit more about that. This is Cup of Go for 09/26/2025. Stay up to date with the important happenings in the Go community in about fifteen minutes per week, sometimes twenty, sometimes thirty. I'm Jonathan Hall.
And you're not French. I'm Shay Nehmad.
I'm not French. Should I be French? I don't get
it. Yeah. Last week, covering for you, we had Gabriel. Thank you so much, Gabriel, for, covering for John. You if you wanna live up to his podcasting ability, maybe you can run this entire episode using a French accent.
I'm not even gonna try.
Yeah.
I make enough of fool fooling myself with my own accent. I don't need to do it in someone else's.
Talking about naked returns and some such? Right. Glad to have you back. What do you have for me?
It is good to be back. Last week, I was stressing out with my two kids in Guatemala. It wasn't a vacation. I heard you I heard you try to claim I was on the beach sipping Mai Tais and stuff like that. I was chasing toddlers around a non childproof house with chickens and cats and stuff in Guatemala. Chasing kids drinking Mai Tais. No. There we go. There we go. Now the whole reason for the trip was to do some dental work for my daughter, my two year old daughter.
Much cheaper there than in The US. God bless the American healthcare system.
Don't even get me started.
Let's talk about Go. First up, this guy named Shay. Is that how I pronounce it? No, it's not. Shay is doing a meetup in San Francisco. Again, Halloween themed gopher meetup. If you need something scary to to keep you going, you can edit the runtime. That sounds scary enough to me to make it for Halloween. And a live episode recording, that also sounds kind of scary. So I think this is perfect. It'll be on October 23. Do you have a location? A Forge.
Yeah. It's gonna be happening at Forge. I don't know him either. Someone, I think they might be a listener or just a Slack member or whatever reached out and were like, hey, we have a pretty cool office. Do you wanna come by? Which was super cool. That's awesome. And there's one, CFP still open. We have a thirty minute slot at the end which is open to anyone who wants to come do a talk, a lightning talk, a real talk. We could we could definitely make it
happen. Super. Also in the news, let's go.
If after my meetup, the next day you're in Utah, tickets for Go West, October 24, are online. We talked to the Go West organizers. You should go and listen to the episode back if you're on the fence, if there's like any chance you can make it. I think actually listening to that episode will definitely tip you over the edge, with Moriah and Derek.
Yeah. I'm one of the cofounders of the Go West Conference, Moriah Peterson, long time Go user, content creator, and obviously conference organizer. And yeah. Yeah.
I'm Derek. I'm one of the, more silent partners, in organizing Go West, kind of the introverted side, but
You provide the money. Right? At
Yeah. Least I try to help with that anyway.
Are you planning to go to my meetup or Go West, or are you too busy?
I'll be at Go West.
Oh, that's a shame. That means you won't be
in Go For Con Africa. That's that's what it means. I will not be at GopherCon Africa. The good news is GopherCon Africa is online, though, so maybe I can catch some of the the stuff happening there the next day.
I mean, if you're willing to forgo sleep, it's pretty much not the same time zone.
Who sleep? So yeah. Go for Con Africa is in Lagos, Nigeria, October 2425. So you might, with time zones, you might be able to leave, go west, hop on a plane and land in Lagos just in time to catch the closing talk there if you really, really rush.
Yeah, it's GMT plus one. I was like, wait, is it GMT plus three? But no, it's the other side of Africa. It's West Africa, that's not it. So there's a call for sponsors, there's call for speakers, and they say 400 plus people are supposed to, come, and you can get your ticket. It seems pricey, 30,000.
What?
But I don't know what's the currency. So it might be actually incredibly cheap.
Let's do the conversion here. NGN. So
I don't even have dollars, like, really pegging for
$20.
$20 for a ticket is okay for a conference ticket.
Yeah. I might even be able to afford the airline ticket for that if I wasn't speaking at Go West. Cool. Cool.
So, yeah, conferences, meetups, Gophers coming together. I mean, all the cynicism and jokes and whatever aside, there's, I think there is value in going to these events and meeting the people. If you're I really a beginner. Yeah. Yeah. Yeah. Because seeing the humans behind the GitHub issues.
Yes. Yes. And just getting a sense that you're not in it alone, especially if you're new. It's nice to know that other people struggle the same way you do. And some of them overcome those struggles and go on to do amazing things such as teaching other people how to overcome struggles.
Yeah. And be the speakers. Yeah. You always see like people the the speakers, they're like the highlights and then you see people in the booths. I like talking to people in the in the sponsor booths. They're the ones really in the trenches. You know what I mean? Mhmm. Like solving production issues while trying to sell their whatever authentication software or software consultancy. Yes.
One last meetup to mention, we talked on the show about Let's GoConf, which is like Go For Con Russia, basically. They had a follow-up, sort of message in the telegram that I joined, which took me forever to read. Mhmm. A bit inside baseball, but Jonathan actually had time to go grab coffee and come back by the time I tried to read this. What I understood is that generally, you know, they were like, friends, thank you so much, it was awesome.
Thanked, Moy Office, which is like my office, which was the sponsor of the event. So, Spasiba, my office. They had a one to a 100 to one game. Do you have that in, America? I know it's a very European game one. No. I don't know 100 people sit in the audience and one person on the stage is trying to answer trivia questions. Everybody else is answering it as well. And Oh, you know, it's it's basically you doing trivia versus a 100 randoms.
I see.
So they did that in the conference, which sounds like super fun. You ask people about Go stuff. And they sent a link to all the pictures, which I don't know. I I never opened a link to like a photo drive where I wasn't there and I was just hunting for myself. Mhmm.
So it was actually an interesting experience. Instead of just scrolling through all the pictures desperately looking for when the photographer may have grabbed me, you're just looking at the people trying to figure out what sort of time they had. And it looks like a super serious conference. Like, looks really fun. And they were, like, already ready for 2026, looking for feedback, blah blah blah.
So they're like, seems like a really good event. Yeah. Cool. Cool stuff. So that's the conferences and meetups, section.
Nice. Let's move on to some proposals.
I thought there were no proposals this week. I thought it was quiet week. What what's going on?
It was not. We have several to talk about, actually. I think we have three I wanted to to highlight. So one proposal I'm pretty sure we talked about before, although I'm not finding it right now to put a link, that has been accepted is the proposal to add a new method or a new function to the errors package called as type. You probably are familiar with errors dot as, which takes an error as an argument and then another value that it tries to coerce the error into that value.
And it's kind of confusing to use sometimes. The proposal is to add a new generics version of that, basically. That makes it just a little bit easier to use. So you call as type error and it returns a new error of the type you want or in a boolean indicating whether or not the conversion was successful. So it's kind of like a type conversion for errors that handles nested errors. Does that make sense?
Yeah. It's not something I like wasn't able to do before without Right. Generics. Right? So this is just a nice way to do something that probably every code base of significant size already has set up.
Very possibly. I think the main thing about this is it makes it easier. The errors. As is a little confusing, like should the I'm past The second argument should be a pointer or not. That could be confusing depending on how your errors type is defined and so on.
This will make that, I think, a little bit easier. So yeah, it doesn't add new capability. It's just a new way to do something else that we already could do. And it's arguably more ergonomic, at least in some cases. So yeah, it's been accepted. I imagine it will be in 01/1926.
Yeah. Someone wrote like, give me a day or two, I'll send you a poll request, which was like my famous last words of like so many Slack messages I've sent. So I really hope you disprove the my norms at least, Ju Juubobwiss. This person's, like, GitHub name. Or Juub Zero BS. Maybe that's a better way to read it. Oh,
there we go.
On our Slack channel, this sort of paper plus issue plus design document was shared for a new profile for goroutine leaks, which I found like super interesting. Generally, it's rare when people share stuff in our show and it's just one to one makes it to the next episode. But yeah, Akshay Shah sent it. Thanks. I I tried to read the paper.
I definitely read the entire proposal. What's going on is it's a bit hard to explain, but I'll try to do it in show form. So you you can have multiple Go routines running. Right? Normally, think of your program as you have the main one and then that spawns a bunch of other ones.
And they do stuff. Right? They do work and then eventually it all it all come back and the final one finishes. That is at least from normal flow. Although sometimes it's like you run an HTTP server, every request spawns a new go routine, things like that.
There is like race detection and some other tools to help you find, you know, potential deadlocks and potential concurrency issues. One concurrency issue that isn't like super easy to detect is goroutine leak. Is that did you ever meet, like, such a case in production or maybe
Oh, I
have a code review comment that was like, oh, you should avoid it?
Yes. Definitely. In fact, I have an issue, an ongoing issue with one of my projects I think is a go routine leak, and I haven't been able to pin it down. So maybe this will help me.
So what is a leaked go routine? Like, let's try to explain it, Avian. Yeah. Good question.
It's Essentially, it's a go routine that you're no longer using, but keeps running, doing something. Maybe in a loop or maybe it's blocking on some IO that's never going to happen or waiting for a channel to be closed that's never getting closed or something like that.
Yeah. Think that's the best, example. Like, let's say you have a a goroutine that's like, listen, it's selecting on a channel, right? That's never ever gonna be like, no content's gonna go through that channel.
Right. Like you're you're done with the channel. You just maybe forgot to close it or something. Right? So it's just sitting there. Yeah.
Exactly. Exactly. So this, proposal suggests using memory reachability to detect goroutines that are blocked and can't be accessed by any other running goroutine. So you you have the main goroutine running, but it's already doing something else and you like spawn this goroutine and it's it's like stuck. This is this has a a really good combo of there's a paper behind it, there's a design document behind it, and there's real need.
So this is not like, oh, I want to redo errors again, which is like, you know, there's no real production need behind it. It's just like a opinion improvement. It's like, look, here's a paper from someone inside Uber. We have found, like, in production service, three distinct goroutine leaks, which cause 252 goroutine leaks over twenty four hours. Pretty cool.
And what they suggest is you can add a pprof thing. So you can add a runtime profiler thing that, causes the garbage collector to mark available memory from each goroutine and then you know if there's one that's waiting on memory that no one else can transitively reach to.
Mhmm.
And this has already been going like there's a pull request, a change list, whatever. And I hope it's not like dying. I hope it's actually gonna happen soon because even yesterday there was a was a commit. Right now they're like, oh, test helpers for detecting goroutine leaks blah blah blah. Very cool.
Awesome. I
love it. And yeah, if you wanna turn it on, what they suggest is a go experiment flag. Because this does this does, like, mess with the runtime and the garbage collector. You you probably wouldn't want this on by default. You know what mean?
So so so how would you use it? Would would you use it like you use the the minus race flag during tests or you use it during production or
how would it be used typically? Generally, you know, this has no false positives and the implementation is pretty clean and minimal. So I would run it in production, like
Okay.
Using a pprof. Then you know how you can import the HTTP pprof thing and it opens an endpoint with all the things. But with like, you know, an environment flag that's like Sure.
So you can only turn it on as you need it.
Yeah. You turn it on. Turn it on,
get all your leaks fixed and then turn it off for six months and then try again, see if something else popped up or something.
So so I'm like, I'm thinking of this, the same vein I'm thinking of, profile guided optimization, where I have 10% of my servers running it all the time and randomly selecting like different load, servers, just every day replace the the random 10% of the Kubernetes pods that have this flag. You know what
I mean? Sure.
And then most of your servers don't have this on or profile guided optimization or whatever. Yeah. And they just like operate to their maximum capacity, not worrying about all this diagnostic information. But like 10% of your users suffer maybe slightly worse performance or slightly weird behavior as your program gets better and better and better. Probably worth it.
That's how I would deploy it. But you know, this is assuming so many things. Assuming you run Go in multiple instances, blah blah blah. You could just do it in your end to end test. I think that's the easier way to do it. I just, I have a feeling, my Spidey sense is like this is the sort of stuff that only happens in production.
A lot yeah. A lot of goroutine leaks wouldn't be probably would I don't I don't know how precise this is, but I imagine they wouldn't be detectable on a test where the process exits immediately after your test, and
you you don't
know that that goroutine is still there.
So I'm very excited about this proposal. Very cool paper. Go check it out if you're into that stuff. I think it's, at the final stages of the pull request. So if you wanna go even, give a review and whatever.
I wanna talk about one more proposal, and this one requires some archaeology. I had get out my shovel to dig this one up.
Oh, it's four digits.
It's only four digits.
I was like, you pasted the URL wrong, but no.
This was opened on February 1235, so it's over a decade old, but it's been moved to the active column, and so they're considering it. It has a bunch of upvotes, 166. They'll make that 167. The proposal is to directly reference embedded fields in struct literals. To make that make sense, how often do you use embedded structs, Shai? I know you don't use Go right now, but when do
you I know, no. I use I use it for a side project. I mean, it's it's pretty often. Sort of the best way to do composition. It's actually one of the hidden gems about this language, to be honest.
Yeah. But are there any annoyances that come up when using embedded structs?
To me, I never remember exactly how to use them after. Like, oh, is it what's the type exactly? Do I need to put, you know, a inside b? Do I need to put like b parenthesis because it's you know what I mean? That's the main that's the main thing. Just trying to memorize. And I guess knowing when to use it, because if you misuse it, it kind of sucks.
Yeah. You're when you have an embedded struct and you want to reference the fields in the embedded struct, if the struct has already been declared, it's easy, right? You just treat them as though the regulars, the embedded fields are just regular fields, right? But when you're trying to instantiate that struct, it could be annoying because you have to like reference, you have to like nest your struct literals when you're building that, or you just say var foo is of type foo struct, and then you say foo dot a equals whatever, foo dot b equals whatever, and then it doesn't matter if they're embedded or not. But if you want to do a struct literal, I find it incredibly annoying that I have to nest those things, especially if I have nested, nested, nested embedded structs, then there's multiple levels of this.
So this proposal number nine thousand eight fifty nine, it's so short I can even say the number. The proposal is to no longer require literally nesting those struct fields when using writing struct literals. So if you have a type E struct with a field A and a type T struct with field E, you have to do t open paren e colon e open paren a colon one, close paren, paren. I know that's hard to visualize on an audio format, but I hope you get the idea. With a new proposal, it would be t open paren, A colon one.
So you could reference that embedded field inside of E directly in the struct literal. I love this proposal because it would simplify virtually every project I've worked on. So I particularly like this comment from Alan Donovan that says, This proposal seems well defined, easy to implement, useful, clear and popular, and it makes the language more consistent. So it's hard to imagine the downside. I would kind of expect something like this, that someone's going to come up with it, Oh, but that would break this one corner case or whatever.
Oh, it wouldn't be backward compatible on this particular case. And there doesn't seem to be anything like that. So I don't know why it's been sitting for ten years without much attention, but finally it's got some attention. It's in the active column. If you like the idea, go and upvote it and maybe we'll get that added to a new version of Go coming soon. One cool thing, someone wrote
Oh, it's actually Alan again. All over this. The number of occurrences of this pattern, like how many times this proposal would be useful, like reference to embedded. That happens a lot. Seems relevant. Yep. Ten years in the making. Well, I think that's the
end of our main segment. Let's do a quick break and we have a few lightning round items before we close out the program.
Yep.
Kicking it off this week, big shout out to Thomas Bruno for joining us as a new Patreon.
Thank you for joining us as Cup
of Gopher Mini. Woo hoo. As you know, if you're a regular listener, this is just a hobby of ours. We don't get we don't make any money off of this. We pay money to do it for hosting and for editing and so on.
It's going to help support that cost and make our hobby a little bit less expensive. You can join us as a Patreon. Go to cupago.dev. You can find links to Patreon. You can also find links to our Swag Store, links to past episodes, bios of us and our co hosts, our temporary co hosts as they come and go.
And, yeah, check that out. Be sure to leave a rating and review on iTunes, Apple Music, whatever, Spotify, wherever you listen to this, leave a rating and review that helps get the popularity up, get get the word out, share with a friend or colleague that you like the show. We don't advertise, so word-of-mouth is the way to go. I we also have a couple of items to talk about with regard to swag. Shy's Swag.
Swag. Shy's looking into whether or not we should get hats with Brewster. We could get some various baseball caps or bucket hats. If that's the kind of thing you'd like to wear, let us know. You can reach us on the Slack channel over on Go For Slack at Cup A Go, or you can find our email address on the website I mentioned, cup of dev.
I mentioned it just because my dad is in California right now, my parents came to visit and he didn't bring a hat. So I was like, maybe I could really quickly get a hat going and then people would like it, and then, you know, I'll order a sample first. But then I dove into the rabbit hole of which one to take. If they only had one option, it would already be on the store, but they have like 200 different hat options and then the design and oh, people like embroidery, so I need to redo the logo in the six basic colors and simplify the the pixels and then Nano Banana doesn't support giving specific colors yet, so I was like, ugh. But if you if you would buy a hat, even if it's just like two people, I would I would make that happen.
I want a cup of go hat.
One other comment regarding swag. I am preparing to have a bow and or neck tie made for myself. I'm gonna use the Hawaiian T shirt pattern we talked about on the show a couple episodes ago. If you would like one also, a bow tie or a neck tie, connect with me. Maybe we can save some money by doing a bulk order.
These aren't Brewster themed, at least not at the moment. These are the regular Gopher, but if you'd like one, just read it out to me. This isn't official or anything. I'm not going to make money off of it. Thought I'd make a bulk order if enough people want it, save a little bit of money, and then I could ship it out to whoever wants it. So if that's interesting to you, reach out.
Cool. Cool. One last thing on the updates here. Yes. Who's sponsoring this week's episode?
Nobody. Because I got a new client.
That's awesome.
Yeah. So I'll be starting October 6 with a new client. Of course, I'm generally available if you do need some go help later on, reach out to me. But thanks everybody for supporting me and my potential trip to what did talk about? Flying to India for Go For Con?
Flying yacht or something? Yeah.
Oh, yacht. Yeah. I don't remember. Yeah. The second one
to to help carry the the your first one from all your Go work.
That's that's what I need. Yes. Yes.
People people generally are supportive of, our job related things. Even though this is a Go podcast supposed to be Go news strictly, people like they reached out to me about, like, my wife's new certificate and they're like,
oh, cool. Nice.
I'll I'll go give her a like on LinkedIn or whatever. That was awesome. So thanks thanks to our previous sponsor, Jonathan. Now to to a message from Jonathan. Next week is Yom Kippur, another Jewish high holiday, and I am not here. I am taking some personal time off taking my kid to Disneyland. So, Jonathan, how are you how are you holding up? What are you gonna do? I'm good, but
I could use some assistance. So if somebody who hasn't been on the show before would like to help cohost reach out. And if I don't get any takers, I'll reach out to somebody who has cohosted before.
Yeah. We have our shortlist.
We have a shortlist, but we like to spread the love and let anybody who wants to participate do it.
Yeah. We want more friends of the show. But yeah, if you wanna co host, just like Gabriel, helped us out just, last week and that was awesome. Reach out to Jonathan in our Slack channel or newscapago.dev and, you know, help me out. I'm taking some vacation time. Awesome. Let's move to the lightning round.
Let's do the lightning round.
Lightning round. New Golang Sea Island version is out. Always fun news. This one includes, the naked returns thing. It, like, bumps, Go Fumped, with our support.
Our recent, you know, campaign for clothing all naked returns, and it actually introduces three new linters, iota mixing, go doc lint, and Unquery vet. So this is Lightning Round, so I'm not gonna go into all the details, but I'll just say that the IOTA mixing linter seems super smart. It's just catching cases where you accidentally put iota on one instead of zero, which is almost never what you want. You know, go doc lint, I have my opinions about it, I'm not gonna share them. Mhmm.
But mQueryVet seems like a really good addition. It's the sort of thing that I would really love to to add to any code base, which is, you know, don't do select star in string literals or SQL builders. Mhmm. Which I'm like, I'm I'm wondering what do you think about this? As a as a general rule, prevent select star in SQL queries encouraging explicit column selection instead.
Yeah. It's generally a good idea to to avoid that, I think. Could it could lead it could lead to some I I have had it lead to some problems when when changes The
API is not stable. Right? Like, you select star, but someone changes the columns beneath your feet, like, adds a new column, and suddenly you're unmarshalling breaks or whatever. Yep. Yep. So very, very cool. It's the sort of linter that I would add and then I would tell my team, feel free to put like a no lint if this is like a test or, you know, a script or whatever. Mhmm. Mhmm. Like, you need to use it kind of judicially. But a good addition to Galaxy Island. Generally worth upgrading.
Next up, we talk occasionally about game development in Go. We really need to get somebody on here we can interview who does it.
If they exist.
If they exist. Yeah. Maybe Tim Little, who wrote this post, could come on. Building Conway's Game of Life in Go with Raylib Go. This isn't just a blog post.
It's a tutorial, a step by step tutorial on building Game of Life in Go using Raylib for graphics. So if you're interested in the topic of graphics programming or game programming in Go, this isn't detailed. Of course, the game, the life is a very simple game, if you could even call it a game. But this detailed tutorial walks you through it and has some animated examples at the end. So go check that out.
I really like, how it looks. It just looks so fun just looking at the Game of Life animation, seeing like the gliders and the cells and whatever. Maybe I'll follow this tutorial. Maybe I'll like set aside three hours of my life and just go through this. He says, as his to do pile stares at him attempting to collapse on top of his head. Alright. One last thing for the lightning round for me is that vacuum, one of my favorite, tools, from Dave Shapley, is on the show, Quobix.
Hello, everyone. My name is Quobix, and I'm the founder of a company called Princess Beef Heavy Industries or PB three three F for short. It's actually it's it's shorter when you say it, you know, versus typing out.
So it got a facelift. One of the nice things about really, really, really, really, really good developers recently is I feel like with AI tooling, sometimes they go into an AI tooling field improvement that would never get prioritized, you know, if they had to do stuff manually. So this is the this is what happened. Vacuum got a facelift. They have a really, really nice, TUI now that, you know, Dave explicitly says, I did it because I could do it with Cloud Code.
Mhmm. And oh my god, it looks super good. It's like a dashboard UI by powered by Bubble Tea, the the charm thing. Yeah. It's mouse enabled. It's fast. It's like, I use it. Like, it's actually useful. I know it looks cool and all the stuff that, Kobix does is like fancy AF, you know, like purple, neon pink, princess beef, heavy industries. Like, it's very cool. But this one looks, this one is actually useful as well. Like, lets you read, zoom in, do all that stuff.
So what does VACUUM do?
VACUUM is a open a OpenAPI Linter. It's part of the suite of tools that, Corvix has about, the OpenAPI Doctor and WiredTap and all these suites of, open source tools based on the OpenAPI Lib Hero, Ningo, which are quickly becoming, like, my number one tool for everything APIs. They're, like, so good. I hope this, facelift will get more people using it. I don't know.
So TLDR, the old version of vacuum sucked and the new version sucks more. Is that basically right? Sucks better?
That that thing that thing from Wayne's World? It certainly does suck. You remember that movie? Exactly how does the
suck cup
work? Well, as you can see, it sucks as it does. It certainly does suck. Yeah. So Vaccum got a facelift. If you've been holding off on using Vaccum in your for your company's, open API thing or your project's, API documentation, maybe take this as an opportunity. It's really cool. Very cool.
I think that's a show.
That is a show. Thank you all for listening. Well, I will see you all next week.
Program exited. Program exited. Program exited. Goodbye.
