The show is supported by you, our listeners, and by mister Charles Crouch. Thanks for joining us as a Patreon. More about that a little bit later. This is Cup and Go for 08/19/2025. We're running a little bit late here thanks to holidays, but that's okay. Stay up to date with the important happenings in the Go community in about fifteen minutes per week. I am Jonathan Hall.
And I am Shay Nehmad, and summer vacation is over. I've done two theme parks in a row, and finally, kids are back to everything as it should be.
Nice.
I'm at the office. Kid is at the daycare. Yep. Shareholder value is being created. Nice. Everything's great.
Today was my son's first day of preschool. He had a blast. He was so excited.
All the all the parents out there know, like, what a great feeling this is like coming home after a long hike, taking off your shoes. You just feel like.
Ugh. And the other half of our audience is sitting there with they're they're they're like, I wish I had a girlfriend or or something.
And or boyfriend. And or boyfriend.
Hang in there. You'll find one some someone eventually. Meanwhile, you could be excited. What's that?
And if not, we love you.
Yeah.
Not not like that, though.
Meanwhile, you could be excited to go 1.25 is finally here.
Man, I'm so excited about it. They finally finished a quarter of go two.
That progress bar is just creeping along. It's at 25% now. Yeah. So we've already gone through some of the features in Go 1.25. We're not gonna do a deep dive on that today.
I will say, again, if you're like a new listener or maybe you missed those episodes, there is one place to learn about it, of course.
Oh, yeah.
Anton's blog with the interactive you were
gonna say.
Yeah. The one official, source for, release notes as far as I'm concerned because, oh my god, are they great.
Yeah. The interactive release notes are are nice because you can just play with the, the new features in your browser. We'll have a link to that in the show notes, of course.
Yeah. A highlight feature for us. We mentioned it, but it's like Go Max Progs, JSON v two, the new garbage collector t we mentioned, Waitgroup Go, Flight Recorder, which I think is, like, the hidden highlight of this release, the Flight Recorder. I mean, it's gonna be super awesome for, people actually SRE ing things in prod and, you know, a whole synthetic time for testing, a whole, suite of not like earth breaking features, although they are breaking some things. Discuss Yes. A bit later
But overall,
a great release. And I feel like they didn't have, any major surprises. It came out on time. Like, seems awesome. Than the one thing we're gonna talk about.
Yes. Yeah. So, yeah. Not nothing super earth shattering, but a a nice incremental release, I would say.
Yeah. I feel like people who manage large test suites in Go super appreciate this one. Like the flight recorder for when it fails and synthetic time, and you can add attributes to tests. So I imagine, like, every test now, you have a linter that forces every test to have an owner. And then, like, when it fails or flakes, you know who to tag. That's, like, something I I had to tackle in the past. Seems super useful.
Well, let's move on. So you said something about something breaking. I don't know what you're talking about. What happened?
Well, the Cupago channel, it's a good place to plug it, Cupago channel on Slack, used to be a place for first of it was just us. Right? Yeah. Then a couple of friends joined, so it wouldn't be awkward. And as the years went by on the show, and so the years, plural, which is crazy, you know, some people post maybe links they wanna see, or hey, can you interview this guy?
Some people sometimes use it just for like random, oh, I have a meetup, which is awesome. Most people are just lurkers. Sometimes someone drops like a design discussion, but this is a first, where people said the tools package doesn't compile with the new version. Right? And Andy, friend of the show, was like, oh, your code will fail to comply with Go one twenty five, which breaks a thing called the Go compatibility promise. What what is that, Jonathan?
Yeah. So in a nutshell, the Go compatibility promise is that all versions of Go one. X will not break your code. In other words, if you have some code that works on Go version, say, 1.6, new upgrade to 1.7 or 1.12 or 1.99, it should still continue to work. That's the Go one compatibility promise.
If if they ever go to Go 1.275% of more versions, then that's off the table. They could break all your code. It could it could it could panic and crash and do everything. But until then, the promise is your Go will continue to work.
And a notable the notable exceptions you mentioned, one of them we we covered on the show for almost, like, eighteen months while it was rolling out, for example, the for loop thing. Right?
Yeah. So So in previous versions of Go, every the for loop would reuse the same variable. In new versions of Go, it it creates a new instance of the variable with all sorts of exceptions and ways to get around that if you need to. Far more intricate and detailed than we should get into in this show, but there are exceptions, but they're taken very seriously and very carefully.
Yeah. They're intentional and good, generally. Yeah. Looking at the comment from Rob Findley here, just picking out I picked out intentionally good on purpose because one of his comments on the issue we're about to discuss is reopening because this is a bad unintentional break breakage, so it's neither good or intentional. So what happened?
Yeah. So strictly speaking, it could be argued that this is not a violation of the Go1 compatibility promise because it's a breakage in some unsafe code, and unsafe does not fall under the compatibility promise. However, in practice, it is a breaking change in the XTools package. So XTools used unsafe to work around some major performance problems. One of the packages that used this this unsafe code, token internal, was intended only for Go, please.
However, it got picked up by some other tools also, which are now broken.
And I mean, practically, I know it's x slash something and it's also under unsafe. So, you know, it it follows the letter of the law, but not the spirit of the law. Everybody who's programming around it totally expected this to not change ever. And if at, you know, if at some point your compatibility promise says one thing, but there's a law, I don't remember what it's named, but like an external behaviour of a system, if enough people follow it is the API of that system. You know
what I'm talking about? Know what you're talking about.
Forgot the name, but it's like if enough if enough people think that like, you know, when you say 200, it means okay. Then even if you overload 200 to put an error in it, it means okay, that sort of thing. So, know, if enough people look at X tools and say, okay, this is the part of the Go standard library and it should it should follow the compatibility promise. I mean, I I assume the community will be a bit more lenient for planned breakages, but not just like random breakages. And funnily enough, this was mostly reported on the channel.
Yeah. On the Cup of Goat, Slack channel.
Yeah. So a big thanks to Rob Findley or Findley, who, was on the Goat team apparently and saw this discussion and it piqued his interest because we're talking about things breaking at 1.25, which shouldn't happen. But they you know, he brought it back up. The issue had been discussed. Like somebody had discovered the issue already, even during RC1, but it was figured, you know, this is not part of the compatibility promise.
We don't need to do this, but hadn't realized the full implications. So it has been reopened and he summarizes the conclusions they've come to.
Yeah. You even there's even an analysis of, like, which versions it is broken and which versions it isn't broken. It's pretty cool. Like for versions of X tools. So some of them broken, some of them are okay. I think it's gonna be difficult to like actually fix. And I don't know. The there are some fixes suggested. Right? I'm looking at the issue.
It's like eight hours ago, and Findlay's looking for, for feedback. But one option is to tag the broken, versions with fixes to limit the new versions created, retracting all the broken versions, and maybe include a fix in Go one twenty five one, which is not gonna be expedited. So it's like only early September. Although that's two weeks away. I mean Yeah.
Early September isn't that far. Yeah. But the retraction would be for versions 0.8 through version 0.24. It's like a year and a half of releases. It would be retracted. So yeah. Anyway, I I have to say, although this is clearly an annoying bug for a large number of people, I I feel good about the way the Go team has handled it. They've they they could have been sticklers and said, no. We didn't we didn't break the rule of the law. We're we're not gonna do anything about it.
But they I I think they're doing the right thing and and taking the time to decide what to do.
Yeah. And also, thanks to them for lurking in the channel. Yeah. And, you know, there are a few people pointing it out. Andy, of course, we mentioned, Vladislav Eermak. I I love his, Slack. I love your Slack thing, Vladislav, 11 x engineer. That's just like one x more than all other engineers. It's like, you remember that thing? It goes to 11. Why not make 10 the loudest? No. This one goes to 11. You know what I'm talking about?
No. I don't.
Spinal Tap. Have you watched that?
Oh, no. I've never seen that one.
If you can see
Yeah.
The numbers all go to 11. Look. Right across the board. Oh. 11. Oh, I see. 11. 11. Then Amps go up to 10. Exactly. Does that mean it's louder? Isn't any louder? Well, it's one louder, isn't it? Like, a lot of people, joining and chiming in on the on the thread. Very cool that it, like, happened in the in the channel.
Jamie, of course. Josh. Like, a a few familiar, the usual suspects and a few new people. And, you know, the x packages are not under that promise, but it's very clearly, a good move from the GoTeams part to understand that this is like y'all messed up. The by the way, the change itself is so, like, tiny and detailed.
There's a there's a struct called token file, set. Right? They changed its size, so it's not padded anymore. It's like the tiniest detail, a tiny piece of gravel. Sometimes it's crazy to me that any software ever compiles like ever. Yeah. So cool stuff. New version, not without its hitches, but cool, cool stuff. And honestly, most of it happened in the Copago Slack channel, which is referenced in the issue itself. So I feel like we're very official.
Wow. Nice. We to wait until you see links to our Slack channel or episodes and, like, commit messages and source code.
Let's move on to another post from Anton.
Yeah, dude is prolific. So we'll include the Twitter link and the actual post link if you don't wanna visit Twitter. But, Anton has released a really good package. I mean, it doesn't have a lot of usage yet, so I don't know if it's actually good, but it seems to be super, reasonable. Low level building blocks for, like, idiomatic Go pipelines with channels and whatever.
If you have to build stuff that's, like, concurrency focused, do you reach for specific packages? Do you only use, like, channels and standard library things?
No and no. What do you mean? I I don't reach for specific packages and I don't always use the standard library. I often write my own little thingies, and I don't always use channels. I often use Range Rover Funk these days too.
So the the tooling you have with especially since Range over Func is pretty good. Like, you could spin those out, but how many times do you really wanna implement? Like, filter, map, reduce, drop, take, take end, take while, first, chunk, chunk by, you know, I tell you what these flatten. This is one thing that, like, okay, read slices from input channel and send them in order on the output channel, like flatten a bunch of channels, something I've had to implement multiple times, right? You have like, you're reading from two places and you wanna shove them into one, super basic things.
I just did that last week with an iterator. I need I had two iterators return the same type. I needed to read one and the other, and I I did it myself. It was it was 10 lines of code or something, but it seems like the kind of thing I would expect to see in a in the iter package.
And on the flip side, would you agree that a lot of these concurrent libraries, like concurrency libraries are super opinionated? They like hide a lot of complexity from you.
I don't know if I have an opinion because I don't think I've ever used one, but I wouldn't be surprised if that's true.
So, I mean, there's a lot of these. RIL is a good example. You know, just tries to make things easy, but I think loses some of the simplicity. It's like very opinionated and hard to sort of control. So Anton just came up with a with a package with all these like super useful functions, like a tiny Swiss army knife for things like deduplication, routing, batching, windowing, filtering, sampling, and just like the classic map filter reduce, for working with channels.
It already has, a 121 stars, although I'm one of them, so I don't know if you take it. Honestly, next time I need to do, like, some channel stuff and go, I'll reach for that first. Cool. Yeah. The code itself looks pretty great too. I actually read the code. It's pretty simple. Highly documented, which I liked, and uses, you know, like four for each. Like, if you read the code, it looks pretty good, to be honest. Cool.
Only imports context, you know, so it doesn't introduce a lot of hidden things for you. So I recommend you check it out. I don't know if you have any channel, work planned, but next time you you do, check out this, this library. I think it's gonna be useful.
Alright. One last thing before we, take a quick break here. Gopher Con in New York City. It's coming up in just a couple weeks, August. Are you going there or no?
I'm not going. Seems like a serious lineup.
Yeah. I would love to go, but it's with small children
Yeah. Yeah.
It's not easy right now. It's not that time of my it's not that season of my life.
Oh, I like that. It's like you're it's a show. You know, Jonathan Hall, they they really had it in season three, but season five, when he switched to Rust, it all broke down.
Yeah. Anyway, check out GopherCon
in New York. I wanna highlight the August 25 as a woman who go meetup, evening before the, I think the thing actually starts, which I think is super clever. It's like a pregame, and it is included in your conference pass. So if you're going, if and you have a ticket, you could go. And lots of people we know who have been on the show are going.
Mickey Tabecca is doing his, Ultimate Go thing, famously known as, Cup of Go's first interviewee, I think. Right? Yep. Yep. William Bill Kennedy, right, also was on the show, doing his, Ultimate Software Design and Engineering, which I'm very interested in because I've been following him on social media.
He's been doing a lot of like AI agent based stuff. Seems like he's really dipping dipping his toes into that. TinyGo hardware sessions, Meet the Go team seems awesome. I would wish to like mingle between them and see the faces behind the GitHub issues. Mhmm. Just looks really great. Honestly, dude, if you can get your company to get you a ticket, go. It looks amazing. Tons of sessions and whatever. Filippo, the Go Cryptography State of the Union.
I mean, and ending with AI and Go opportunities and challenges. I don't know. Looks awesome. Something for everyone. Let's head to a quick break, with all this FOMO in our our bellies.
As we enter the top of the show, big thanks to Charles Crouch for joining us as a Patreon. If you would like to support the show financially to help us pay for editing and hosting, head over to cupugo.dev. There's a Patreon link. There's also a link for swag. There's a link to all of our past episodes. There's links to our Slack channel. I think we've already covered most of the bases just throughout the show today.
Yeah. Honestly, the the show is becoming more ingrained with the Go language itself. They are becoming one.
I think the only other thing we forgot to mention or haven't mentioned yet is to share with a friend or colleague and leave a rating and review. Smash that like button, blah blah
blah. We would appreciate it. I haven't checked our numbers recently, but, it's always fun when, y'all help out the the show and have it reach other places and new people. And thanks again, Charles. We appreciate you. Let's do a lightning get to the lightning round. Yes. Lightning round. Up for the lightning round, it's a really small thing, but I, you know, Postman? Do you use Postman, by the way?
Not really. No. I kinda hate it.
I I don't love it, but they I had a state of the API survey Uh-huh. Which was to me, it was super interesting. They asked about, like, API tooling, what do you use? What do you use it for? Governance, blah blah blah. And they didn't mention, Princess Beef. It wasn't any of the options. So I felt like every other field, I had to go like other. I just use Princess Beef's things and link to Dave's thing, which we interviewed on the show.
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. Anyway.
It's kind of a hard to forget name. Princess Beef Heavy Industries. Yeah. I filled out that survey, honestly, because they I think it had a Kindle or or iPad, like, if you fill it out. Uh-huh. And I, or a $100, and I got the $100 as well. Oh, sweet. So thanks, Postman. Like, it's not sponsored, but you're like, you actually went out with a gift card. Yeah. Now I need something to buy that's a $100 in on Amazon. Maybe know you can get some postcard. 10 times or something.
So now now I feel slightly bad since they just gave me money. Feel slightly bad the hot take I was just going to offer.
No, shoot.
But, you know, so my feeling about Postman is kind of like how I feel about GUI interfaces for Git. Like, it's it just makes your life more difficult.
I think that I agree, but if you have to if you have a workflow in your team where non technical or non technical first people have to contribute to Git or have to, you know, send an API request every now and then, especially in a fast, like, it's startup environment, which I'm more used to where maybe you just don't have time to build the front end, but you wanna see the feature working like for tomorrow's demo. Having like a Postman collection, can just give to your product manager or whatever. Usually it works pretty well. Yeah. But I also don't love it.
I also don't love it.
And and and I say my my hot take knowing that certain listeners love their GUI interfaces to get, but I don't understand you folks.
And maybe some of work for Postman.
I don't
know if they do go at Postman actually.
I don't know. Anyway, I have a I have a lightning round item too. I want to do a shout out to Outrig. Outrig is an open source observability tool for Go development. It real time log search, Go routine monitoring, variable tracking, and runtime metrics to help you debug and understand your applications.
Github.com/outrigdev/outrig. There's some cool animated stuff on the readme that sort of gives you a sense of what it does. It's kind of like, I don't know, just the things I said, logging metrics and so on. The sort of stuff you build with your cloud provider, it provides you sort of all of that in a box in your development environment.
Man, it looks awesome from the homepage. Good good homepage. It immediately screams like, oh, install this if you want hard, like, hardcore, runtime statistics and log searching and whatever. It only supports Mac OS analytics right now.
So if you're a Windows user, sorry, but maybe it'll come in the future.
Yeah. Maybe, George can release it for you.
Cool, man. Think we're there. I think that's the end of our show. Yeah?
That's the end of the show. Thanks a lot, everybody, for listening. As mentioned, we we we're taking a a we delayed this episode a little bit, but we should record this Friday again. So everything should be back to normal.
See you in less than a week then. About 75% of the week. About the same distance between now and version two of Go.
From from Go to. Yeah. Exactly. Sake it forever. Alright. Program exited. Program exited. Goodbye.
