The X/Tools Files
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.
Jonathan Hall:Stay up to date with the important happenings in the Go community in about fifteen minutes per week. I am Jonathan Hall.
Shay Nehmad: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.
Jonathan Hall:Nice.
Shay Nehmad:I'm at the office. Kid is at the daycare. Yep. Shareholder value is being created. Nice.
Shay Nehmad:Everything's great.
Jonathan Hall:Today was my son's first day of preschool. He had a blast. He was so excited.
Shay Nehmad: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.
Jonathan Hall: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.
Shay Nehmad:And or boyfriend. And or boyfriend.
Jonathan Hall:Hang in there. You'll find one some someone eventually. Meanwhile, you could be excited. What's that?
Shay Nehmad:And if not, we love you.
Jonathan Hall:Yeah.
Shay Nehmad:Not not like that, though.
Jonathan Hall:Meanwhile, you could be excited to go 1.25 is finally here.
Shay Nehmad:Man, I'm so excited about it. They finally finished a quarter of go two.
Jonathan Hall: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.
Shay Nehmad: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.
Jonathan Hall:Oh, yeah.
Shay Nehmad:Anton's blog with the interactive you were
Jonathan Hall:gonna say.
Shay Nehmad:Yeah. The one official, source for, release notes as far as I'm concerned because, oh my god, are they great.
Jonathan Hall: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.
Shay Nehmad: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.
Shay Nehmad:A bit later
Jonathan Hall:But overall,
Shay Nehmad: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.
Jonathan Hall:Yes. Yeah. So, yeah. Not nothing super earth shattering, but a a nice incremental release, I would say.
Shay Nehmad: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.
Shay Nehmad:That's, like, something I I had to tackle in the past. Seems super useful.
Jonathan Hall:Well, let's move on. So you said something about something breaking. I don't know what you're talking about. What happened?
Shay Nehmad: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?
Shay Nehmad: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.
Shay Nehmad:What what is that, Jonathan?
Jonathan Hall: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.
Jonathan Hall: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.
Shay Nehmad: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?
Jonathan Hall: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.
Shay Nehmad: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?
Jonathan Hall: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.
Jonathan Hall:However, it got picked up by some other tools also, which are now broken.
Shay Nehmad: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
Jonathan Hall:what I'm talking about? Know what you're talking about.
Shay Nehmad: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.
Shay Nehmad:Yeah. On the Cup of Goat, Slack channel.
Jonathan Hall: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.
Jonathan Hall: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.
Shay Nehmad: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.
Shay Nehmad: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.
Shay Nehmad: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.
Jonathan Hall: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.
Jonathan Hall: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.
Jonathan Hall:But they I I think they're doing the right thing and and taking the time to decide what to do.
Shay Nehmad: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.
Shay Nehmad: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.
Shay Nehmad:Why not make 10 the loudest? No. This one goes to 11. You know what I'm talking about?
Jonathan Hall:No. I don't.
Shay Nehmad:Spinal Tap. Have you watched that?
Jonathan Hall:Oh, no. I've never seen that one.
Shay Nehmad:If you can see
Speaker 3:Yeah.
Shay Nehmad:The numbers all go to 11. Look. Right across the board. Oh. 11.
Shay Nehmad:Oh, I see. 11. 11. Then Amps go up to 10. Exactly.
Shay Nehmad: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.
Shay Nehmad: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.
Shay Nehmad: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.
Shay Nehmad: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.
Shay Nehmad:Wow. Nice. We to wait until you see links to our Slack channel or episodes and, like, commit messages and source code.
Jonathan Hall:Let's move on to another post from Anton.
Shay Nehmad: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.
Shay Nehmad: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?
Jonathan Hall: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.
Shay Nehmad: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.
Jonathan Hall: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.
Shay Nehmad: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.
Jonathan Hall: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.
Shay Nehmad: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.
Shay Nehmad: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.
Shay Nehmad: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.
Shay Nehmad: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.
Jonathan Hall: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?
Shay Nehmad:I'm not going. Seems like a serious lineup.
Jonathan Hall:Yeah. I would love to go, but it's with small children
Shay Nehmad:Yeah. Yeah.
Jonathan Hall:It's not easy right now. It's not that time of my it's not that season of my life.
Shay Nehmad: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.
Jonathan Hall:Yeah. Anyway, check out GopherCon
Shay Nehmad: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.
Shay Nehmad: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.
Shay Nehmad: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.
Shay Nehmad: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.
Shay Nehmad: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.
Jonathan Hall: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.
Jonathan Hall:There's links to our Slack channel. I think we've already covered most of the bases just throughout the show today.
Shay Nehmad:Yeah. Honestly, the the show is becoming more ingrained with the Go language itself. They are becoming one.
Jonathan Hall: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
Shay Nehmad: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.
Shay Nehmad: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?
Jonathan Hall:Not really. No. I kinda hate it.
Shay Nehmad: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.
Shay Nehmad: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.
Speaker 3: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.
Shay Nehmad: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.
Shay Nehmad: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.
Shay Nehmad:Now I need something to buy that's a $100 in on Amazon. Maybe know you can get some postcard. 10 times or something.
Jonathan Hall: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.
Shay Nehmad:No, shoot.
Jonathan Hall: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.
Shay Nehmad: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.
Shay Nehmad:I also don't love it.
Jonathan Hall: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.
Shay Nehmad:And maybe some of work for Postman.
Jonathan Hall:I don't
Shay Nehmad:know if they do go at Postman actually.
Jonathan Hall: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.
Jonathan Hall: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.
Shay Nehmad: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.
Jonathan Hall:So if you're a Windows user, sorry, but maybe it'll come in the future.
Shay Nehmad:Yeah. Maybe, George can release it for you.
Jonathan Hall:Cool, man. Think we're there. I think that's the end of our show. Yeah?
Shay Nehmad: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.
Jonathan Hall:See you in less than a week then. About 75% of the week. About the same distance between now and version two of Go.
Shay Nehmad:From from Go to. Yeah. Exactly. Sake it forever. Alright.
Shay Nehmad:Program exited. Program exited. Goodbye.
Creators and Guests

