Episode Transcript
Available transcripts are automatically generated. Complete accuracy is not guaranteed.
Jonathan Hall (00:00):
The show is
supported by you, our listeners,
(00:01):
and by mister Charles Crouch.Thanks for joining us as a
Patreon. More about that alittle bit later. This is Cup
and Go for 08/19/2025. We'rerunning a little bit late here
thanks to holidays, but that'sokay.
(00:23):
Stay up to date with theimportant happenings in the Go
community in about fifteenminutes per week. I am Jonathan
Hall.
Shay Nehmad (00:28):
And I am Shay
Nehmad, and summer vacation is
over. I've done two theme parksin a row, and finally, kids are
back to everything as it shouldbe.
Jonathan Hall (00:37):
Nice.
Shay Nehmad (00:37):
I'm at the office.
Kid is at the daycare. Yep.
Shareholder value is beingcreated. Nice.
Everything's great.
Jonathan Hall (00:45):
Today was my
son's first day of preschool. He
had a blast. He was so excited.
Shay Nehmad (00:50):
All the all the
parents out there know, like,
what a great feeling this islike coming home after a long
hike, taking off your shoes. Youjust feel like.
Jonathan Hall (00:58):
Ugh. And the
other half of our audience is
sitting there with they'rethey're they're like, I wish I
had a girlfriend or orsomething.
Shay Nehmad (01:04):
And or boyfriend.
And or boyfriend.
Jonathan Hall (01:06):
Hang in there.
You'll find one some someone
eventually. Meanwhile, you couldbe excited. What's that?
Shay Nehmad (01:12):
And if not, we love
you.
Jonathan Hall (01:13):
Yeah.
Shay Nehmad (01:14):
Not not like that,
though.
Jonathan Hall (01:16):
Meanwhile, you
could be excited to go 1.25 is
finally here.
Shay Nehmad (01:20):
Man, I'm so excited
about it. They finally finished
a quarter of go two.
Jonathan Hall (01:25):
That progress bar
is just creeping along. It's at
25% now. Yeah. So we've alreadygone through some of the
features in Go 1.25. We're notgonna do a deep dive on that
today.
Shay Nehmad (01:37):
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 (01:44):
Oh, yeah.
Shay Nehmad (01:46):
Anton's blog with
the interactive you were
Jonathan Hall (01:49):
gonna say.
Shay Nehmad (01:49):
Yeah. The one
official, source for, release
notes as far as I'm concernedbecause, oh my god, are they
great.
Jonathan Hall (01:58):
Yeah. The
interactive release notes are
are nice because you can justplay with the, the new features
in your browser. We'll have alink to that in the show notes,
of course.
Shay Nehmad (02:05):
Yeah. A highlight
feature for us. We mentioned it,
but it's like Go Max Progs, JSONv two, the new garbage collector
t we mentioned, Waitgroup Go,Flight Recorder, which I think
is, like, the hidden highlightof this release, the Flight
Recorder. I mean, it's gonna besuper awesome for, people
actually SRE ing things in prodand, you know, a whole synthetic
(02:26):
time for testing, a whole, suiteof not like earth breaking
features, although they arebreaking some things. Discuss
Yes.
A bit later
Jonathan Hall (02:38):
But overall,
Shay Nehmad (02:39):
a great release.
And I feel like they didn't
have, any major surprises. Itcame out on time. Like, seems
awesome. Than the one thingwe're gonna talk about.
Jonathan Hall (02:50):
Yes. Yeah. So,
yeah. Not nothing super earth
shattering, but a a niceincremental release, I would
say.
Shay Nehmad (02:58):
Yeah. I feel like
people who manage large test
suites in Go super appreciatethis one. Like the flight
recorder for when it fails andsynthetic time, and you can add
attributes to tests. So Iimagine, like, every test now,
you have a linter that forcesevery test to have an owner. And
then, like, when it fails orflakes, you know who to tag.
That's, like, something I I hadto tackle in the past. Seems
(03:21):
super useful.
Jonathan Hall (03:22):
Well, let's move
on. So you said something about
something breaking. I don't knowwhat you're talking about. What
happened?
Shay Nehmad (03:28):
Well, the Cupago
channel, it's a good place to
plug it, Cupago channel onSlack, used to be a place for
first of it was just us. Right?Yeah. Then a couple of friends
joined, so it wouldn't beawkward. And as the years went
by on the show, and so theyears, plural, which is crazy,
you know, some people post maybelinks they wanna see, or hey,
(03:50):
can you interview this guy?
Some people sometimes use itjust for like random, oh, I have
a meetup, which is awesome. Mostpeople are just lurkers.
Sometimes someone drops like adesign discussion, but this is a
first, where people said thetools package doesn't compile
with the new version. Right? AndAndy, friend of the show, was
(04:10):
like, oh, your code will fail tocomply with Go one twenty five,
which breaks a thing called theGo compatibility promise.
What what is that, Jonathan?
Jonathan Hall (04:20):
Yeah. So in a
nutshell, the Go compatibility
promise is that all versions ofGo one. X will not break your
code. In other words, if youhave some code that works on Go
version, say, 1.6, new upgradeto 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
(04:45):
off the table. They could breakall your code. It could it could
it could panic and crash and doeverything. But until then, the
promise is your Go will continueto work.
Shay Nehmad (04:54):
And a notable the
notable exceptions you
mentioned, one of them we wecovered on the show for almost,
like, eighteen months while itwas rolling out, for example,
the for loop thing. Right?
Jonathan Hall (05:03):
Yeah. So So in
previous versions of Go, every
the for loop would reuse thesame variable. In new versions
of Go, it it creates a newinstance of the variable with
all sorts of exceptions and waysto get around that if you need
to. Far more intricate anddetailed than we should get into
in this show, but there areexceptions, but they're taken
very seriously and verycarefully.
Shay Nehmad (05:21):
Yeah. They're
intentional and good, generally.
Yeah. Looking at the commentfrom Rob Findley here, just
picking out I picked outintentionally good on purpose
because one of his comments onthe issue we're about to discuss
is reopening because this is abad unintentional break
breakage, so it's neither goodor intentional. So what
(05:43):
happened?
Jonathan Hall (05:44):
Yeah. So strictly
speaking, it could be argued
that this is not a violation ofthe Go1 compatibility promise
because it's a breakage in someunsafe code, and unsafe does not
fall under the compatibilitypromise. However, in practice,
it is a breaking change in theXTools package. So XTools used
unsafe to work around some majorperformance problems. One of the
(06:07):
packages that used this thisunsafe code, token internal, was
intended only for Go, please.
However, it got picked up bysome other tools also, which are
now broken.
Shay Nehmad (06:18):
And I mean,
practically, I know it's x slash
something and it's also underunsafe. So, you know, it it
follows the letter of the law,but not the spirit of the law.
Everybody who's programmingaround it totally expected this
to not change ever. And if at,you know, if at some point your
compatibility promise says onething, but there's a law, I
(06:40):
don't remember what it's named,but like an external behaviour
of a system, if enough peoplefollow it is the API of that
system. You know
Jonathan Hall (06:46):
what I'm talking
about? Know what you're talking
about.
Shay Nehmad (06:48):
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 youoverload 200 to put an error in
it, it means okay, that sort ofthing. So, know, if enough
people look at X tools and say,okay, this is the part of the Go
standard library and it shouldit should follow the
compatibility promise. I mean, II assume the community will be a
(07:10):
bit more lenient for plannedbreakages, but not just like
random breakages. And funnilyenough, this was mostly reported
on the channel.
Yeah. On the Cup of Goat, Slackchannel.
Jonathan Hall (07:23):
Yeah. So a big
thanks to Rob Findley or
Findley, who, was on the Goatteam apparently and saw this
discussion and it piqued hisinterest 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 theissue already, even during RC1,
(07:45):
but it was figured, you know,this is not part of the
compatibility promise.
We don't need to do this, buthadn't realized the full
implications. So it has beenreopened and he summarizes the
conclusions they've come to.
Shay Nehmad (07:56):
Yeah. You even
there's even an analysis of,
like, which versions it isbroken and which versions it
isn't broken. It's pretty cool.Like for versions of X tools. So
some of them broken, some ofthem are okay.
I think it's gonna be difficultto like actually fix. And I
don't know. The there are somefixes suggested. Right? I'm
(08:18):
looking at the issue.
It's like eight hours ago, andFindlay's looking for, for
feedback. But one option is totag the broken, versions with
fixes to limit the new versionscreated, retracting all the
broken versions, and maybeinclude a fix in Go one twenty
(08:41):
five one, which is not gonna beexpedited. So it's like only
early September. Although that'stwo weeks away. I mean Yeah.
Jonathan Hall (08:48):
Early September
isn't that far. Yeah. But the
retraction would be for versions0.8 through version 0.24. It's
like a year and a half ofreleases. It would be retracted.
So yeah. Anyway, I I have tosay, although this is clearly an
annoying bug for a large numberof people, I I feel good about
(09:09):
the way the Go team has handledit. They've they they could have
been sticklers and said, no. Wedidn't we didn't break the rule
of the law. We're we're notgonna do anything about it.
But they I I think they're doingthe right thing and and taking
the time to decide what to do.
Shay Nehmad (09:22):
Yeah. And also,
thanks to them for lurking in
the channel. Yeah. And, youknow, there are a few people
pointing it out. Andy, ofcourse, we mentioned, Vladislav
Eermak.
I I love his, Slack. I love yourSlack thing, Vladislav, 11 x
engineer. That's just like one xmore than all other engineers.
(09:44):
It's like, you remember thatthing? It goes to 11.
Why not make 10 the loudest? No.This one goes to 11. You know
what I'm talking about?
Jonathan Hall (09:54):
No. I don't.
Shay Nehmad (09:55):
Spinal Tap. Have
you watched that?
Jonathan Hall (09:57):
Oh, no. I've
never seen that one.
Shay Nehmad (09:59):
If you can see
Speaker 3 (10:00):
Yeah.
Shay Nehmad (10:01):
The numbers all go
to 11. Look. Right across the
board. Oh. 11.
Oh, I see. 11. 11. Then Amps goup to 10. Exactly.
Does that mean it's louder?Isn't any louder? Well, it's one
louder, isn't it? Like, a lot ofpeople, joining and chiming in
on the on the thread. Very coolthat it, like, happened in the
(10:22):
in the channel.
Jamie, of course. Josh. Like, aa few familiar, the usual
suspects and a few new people.And, you know, the x packages
are not under that promise, butit's very clearly, a good move
from the GoTeams part tounderstand that this is like
y'all messed up. The by the way,the change itself is so, like,
(10:47):
tiny and detailed.
There's a there's a structcalled token file, set. Right?
They changed its size, so it'snot padded anymore. It's like
the tiniest detail, a tiny pieceof gravel. Sometimes it's crazy
to me that any software evercompiles like ever.
Yeah. So cool stuff. Newversion, not without its
hitches, but cool, cool stuff.And honestly, most of it
(11:09):
happened in the Copago Slackchannel, which is referenced in
the issue itself. So I feel likewe're very official.
Wow. Nice. We to wait until yousee links to our Slack channel
or episodes and, like, commitmessages and source code.
Jonathan Hall (11:26):
Let's move on to
another post from Anton.
Shay Nehmad (11:30):
Yeah, dude is
prolific. So we'll include the
Twitter link and the actual postlink if you don't wanna visit
Twitter. But, Anton has releaseda really good package. I mean,
it doesn't have a lot of usageyet, so I don't know if it's
actually good, but it seems tobe super, reasonable. Low level
(11:52):
building blocks for, like,idiomatic Go pipelines with
channels and whatever.
If you have to build stuffthat's, like, concurrency
focused, do you reach forspecific packages? Do you only
use, like, channels and standardlibrary things?
Jonathan Hall (12:06):
No and no. What
do you mean? I I don't reach for
specific packages and I don'talways use the standard library.
I often write my own littlethingies, and I don't always use
channels. I often use RangeRover Funk these days too.
Shay Nehmad (12:21):
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 reallywanna implement? Like, filter,
map, reduce, drop, take, takeend, take while, first, chunk,
chunk by, you know, I tell youwhat these flatten. This is one
(12:42):
thing that, like, okay, readslices from input channel and
send them in order on the outputchannel, like flatten a bunch of
channels, something I've had toimplement multiple times, right?
You have like, you're readingfrom two places and you wanna
shove them into one, super basicthings.
Jonathan Hall (12:59):
I just did that
last week with an iterator. I
need I had two iterators returnthe same type. I needed to read
one and the other, and I I didit myself. It was it was 10
lines of code or something, butit seems like the kind of thing
I would expect to see in a inthe iter package.
Shay Nehmad (13:11):
And on the flip
side, would you agree that a lot
of these concurrent libraries,like concurrency libraries are
super opinionated? They likehide a lot of complexity from
you.
Jonathan Hall (13:23):
I don't know if I
have an opinion because I don't
think I've ever used one, but Iwouldn't be surprised if that's
true.
Shay Nehmad (13:28):
So, I mean, there's
a lot of these. RIL is a good
example. You know, just tries tomake things easy, but I think
loses some of the simplicity.It's like very opinionated and
hard to sort of control. SoAnton just came up with a with a
package with all these likesuper useful functions, like a
(13:49):
tiny Swiss army knife for thingslike deduplication, routing,
batching, windowing, filtering,sampling, and just like the
classic map filter reduce, forworking 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 andgo, I'll reach for that first.
(14:12):
Cool. Yeah. The code itselflooks pretty great too.
I actually read the code. It'spretty simple. Highly
documented, which I liked, anduses, you know, like four for
each. Like, if you read thecode, 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 Irecommend you check it out. I
don't know if you have anychannel, work planned, but next
(14:35):
time you you do, check out this,this library. I think it's gonna
be useful.
Jonathan Hall (14:39):
Alright. One last
thing before we, take a quick
break here. Gopher Con in NewYork City. It's coming up in
just a couple weeks, August. Areyou going there or no?
Shay Nehmad (14:51):
I'm not going.
Seems like a serious lineup.
Jonathan Hall (14:55):
Yeah. I would
love to go, but it's with small
children
Shay Nehmad (14:59):
Yeah. Yeah.
Jonathan Hall (14:59):
It's not easy
right now. It's not that time of
my it's not that season of mylife.
Shay Nehmad (15:04):
Oh, I like that.
It's like you're it's a show.
You know, Jonathan Hall, theythey really had it in season
three, but season five, when heswitched to Rust, it all broke
down.
Jonathan Hall (15:17):
Yeah. Anyway,
check out GopherCon
Shay Nehmad (15:20):
in New York. I
wanna highlight the August 25 as
a woman who go meetup, eveningbefore the, I think the thing
actually starts, which I thinkis super clever. It's like a
pregame, and it is included inyour conference pass. So if
you're going, if and you have aticket, you could go. And lots
of people we know who have beenon the show are going.
(15:42):
Mickey Tabecca is doing his,Ultimate Go thing, famously
known as, Cup of Go's firstinterviewee, I think. Right?
Yep. Yep. William Bill Kennedy,right, also was on the show,
doing his, Ultimate SoftwareDesign and Engineering, which
I'm very interested in becauseI've been following him on
social media.
He's been doing a lot of like AIagent based stuff. Seems like
(16:05):
he's really dipping dipping histoes into that. TinyGo hardware
sessions, Meet the Go team seemsawesome. I would wish to like
mingle between them and see thefaces behind the GitHub issues.
Mhmm.
Just looks really great.Honestly, dude, if you can get
your company to get you aticket, go. It looks amazing.
Tons of sessions and whatever.Filippo, the Go Cryptography
(16:26):
State of the Union.
I mean, and ending with AI andGo opportunities and challenges.
I don't know. Looks awesome.Something for everyone. Let's
head to a quick break, with allthis FOMO in our our bellies.
Jonathan Hall (16:50):
As we enter the
top of the show, big thanks to
Charles Crouch for joining us asa Patreon. If you would like to
support the show financially tohelp us pay for editing and
hosting, head over tocupugo.dev. There's a Patreon
link. There's also a link forswag. There's a link to all of
our past episodes.
There's links to our Slackchannel. I think we've already
covered most of the bases justthroughout the show today.
Shay Nehmad (17:11):
Yeah. Honestly, the
the show is becoming more
ingrained with the Go languageitself. They are becoming one.
Jonathan Hall (17:17):
I think the only
other thing we forgot to mention
or haven't mentioned yet is toshare with a friend or colleague
and leave a rating and review.Smash that like button, blah
blah
Shay Nehmad (17:27):
blah. We would
appreciate it. I haven't checked
our numbers recently, but, it'salways fun when, y'all help out
the the show and have it reachother places and new people. And
thanks again, Charles. Weappreciate you.
Let's do a lightning get to thelightning round. Yes. Lightning
(17:47):
round. Up for the lightninground, it's a really small
thing, but I, you know, Postman?Do you use Postman, by the way?
Jonathan Hall (17:56):
Not really. No. I
kinda hate it.
Shay Nehmad (17:58):
I I don't love it,
but they I had a state of the
API survey Uh-huh. Which was tome, it was super interesting.
They asked about, like, APItooling, 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 likeevery other field, I had to go
like other. I just use PrincessBeef's things and link to Dave's
(18:20):
thing, which we interviewed onthe show.
Speaker 3 (18:22):
Hello, everyone. My
name is Quobix, and I'm the
founder of a company calledPrincess 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 (18:35):
It's kind of a hard
to forget name. Princess Beef
Heavy Industries. Yeah. I filledout that survey, honestly,
because they I think it had aKindle 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 notsponsored, but you're like, you
(18:55):
actually went out with a giftcard. Yeah.
Now I need something to buythat's a $100 in on Amazon.
Maybe know you can get somepostcard. 10 times or something.
Jonathan Hall (19:05):
So now now I feel
slightly bad since they just
gave me money. Feel slightly badthe hot take I was just going to
offer.
Shay Nehmad (19:12):
No, shoot.
Jonathan Hall (19:13):
But, you know, so
my feeling about Postman is kind
of like how I feel about GUIinterfaces for Git. Like, it's
it just makes your life moredifficult.
Shay Nehmad (19:21):
I think that I
agree, but if you have to if you
have a workflow in your teamwhere non technical or non
technical first people have tocontribute to Git or have to,
you know, send an API requestevery now and then, especially
in a fast, like, it's startupenvironment, which I'm more used
to where maybe you just don'thave time to build the front
end, but you wanna see thefeature working like for
(19:44):
tomorrow's demo. Having like aPostman collection, can just
give to your product manager orwhatever. Usually it works
pretty well. Yeah. But I alsodon't love it.
I also don't love it.
Jonathan Hall (19:54):
And and and I say
my my hot take knowing that
certain listeners love their GUIinterfaces to get, but I don't
understand you folks.
Shay Nehmad (20:01):
And maybe some of
work for Postman.
Jonathan Hall (20:04):
I don't
Shay Nehmad (20:04):
know if they do go
at Postman actually.
Jonathan Hall (20:05):
I don't know.
Anyway, I have a I have a
lightning round item too. I wantto do a shout out to Outrig.
Outrig is an open sourceobservability tool for Go
development. It real time logsearch, Go routine monitoring,
variable tracking, and runtimemetrics to help you debug and
understand your applications.
Github.com/outrigdev/outrig.There's some cool animated stuff
(20:29):
on the readme that sort of givesyou 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 ofstuff you build with your cloud
provider, it provides you sortof all of that in a box in your
development environment.
Shay Nehmad (20:44):
Man, it looks
awesome from the homepage. Good
good homepage. It immediatelyscreams like, oh, install this
if you want hard, like,hardcore, runtime statistics and
log searching and whatever. Itonly supports Mac OS analytics
right now.
Jonathan Hall (21:01):
So if you're a
Windows user, sorry, but maybe
it'll come in the future.
Shay Nehmad (21:05):
Yeah. Maybe, George
can release it for you.
Jonathan Hall (21:10):
Cool, man. Think
we're there. I think that's the
end of our show. Yeah?
Shay Nehmad (21:14):
That's the end of
the show. Thanks a lot,
everybody, for listening. Asmentioned, we we we're taking a
a we delayed this episode alittle bit, but we should record
this Friday again. So everythingshould be back to normal.
Jonathan Hall (21:26):
See you in less
than a week then. About 75% of
the week. About the samedistance between now and version
two of Go.
Shay Nehmad (21:31):
From from Go to.
Yeah. Exactly. Sake it forever.
Alright.
Program exited. Program exited.Goodbye.