Cup o' Go

Sponsored by Quantcast!
This episode was recorded live at San Francisco as part of GoSF.

โ˜… Support this podcast on Patreon โ˜…

Creators and Guests

Host
Jonathan Hall
Freelance Gopher, Continuous Delivery consultant, and host of the Boldly Go YouTube channel.
Host
Shay Nehmad
Engineering Enablement Architect @ Orca
Editor
Filippo Valvassori Bolgรจ
Sound Designer / Audio Editor based in Milan

What is Cup o' Go?

Stay up to date with the Go community in about 15 minutes per week

Jonathan Hall:

This show is supported by you, our listener. Stick around to the last part of the news to hear more about that. This is Cup of Go for 01/28/2026. Keep up to date with the important happenings in the Go community in about three or four hours a week. Yeah.

Shay Neymad:

The episodes have been getting long.

Jonathan Hall:

I'm Jonathan. This this week,

Shay Neymad:

our audience is here to check us and make sure that we're standing in time because this episode is recorded live in San Francisco.

Jonathan Hall:

Live from San Francisco. It's cup of go.

Shay Neymad:

Yeah. For sure. We need, like, a KTLM on the news.

Jonathan Hall:

So this week, we're gonna talk about one accepted proposal. This is an old proposal. It's only four digits in long in terms of the, you know, the the issue number. Number 9859 proposed back in February 2020 of 2015, more than ten years ago. Yeah.

Jonathan Hall:

But but it's been accepted. I quite I'm certain this won't make it into go on point 26 since that's just around the door. It's already been frozen for quite a while. But in 01/27, we should see direct references to embedded fields in struct literals.

Shay Neymad:

Directed references to embedded fields in struct literals.

Jonathan Hall:

Yeah. Does that make Can

Shay Neymad:

you break that down for I

Jonathan Hall:

sure can.

Shay Neymad:

So you have a struct literal, so it's like and and your it has an embedded field. It's like struct a, and it has an embedded struct inside it.

Jonathan Hall:

That's right. And you know how annoying those are. Right?

Shay Neymad:

Yeah. Because you have to, like, open let's say the structs are a, b, and c. You have to open struct a

Jonathan Hall:

Yep.

Shay Neymad:

And then open struct b. Yep. And then there, it's like an enter or whatever, and you're like, c is one. Right.

Jonathan Hall:

No longer. Now you can just reference those embedded fields directly. So it's just a, c int. Boom. Done.

Jonathan Hall:

You don't have to reference that embedded struct name anymore.

Shay Neymad:

That sounds pretty easy. Why did it take, like, fifteen years or whatever?

Jonathan Hall:

I don't know.

Shay Neymad:

Was it just, like, not important enough,

Jonathan Hall:

or did it break some I have not read through the 100 plus comments on this issue to understand all the politics that might have gone

Shay Neymad:

into it. But It's like archaeology at this point. Right?

Jonathan Hall:

Yeah. Yeah. It is interesting, though, that the first few comments, of course, happened right when the issue was opened in 2015. Then nothing happened until 2017. There were a few comments there, and then jumps to 2020.

Jonathan Hall:

So it's not like it was active this whole time. It was sitting dormant for years at a time between comments. Anyway, I'm quite excited to see this come through. It will let me refactor some code to be much more readable.

Shay Neymad:

Do you think that changing, like, the struct initialization from the way it is now, like, the verbose annoying version with, you know, a, then b, the embedded part, and then c, which is the actual value, to a and then c directly will go into GoFix, like, the Modernizer, or is that not a

Jonathan Hall:

safe don't know about that. I don't see why it couldn't, but it's also yeah. I don't know. I don't know the answer.

Shay Neymad:

I mean, why refactor your own code if GoFix could go ahead and fix it for you? I'm I'm recently, I'm all about letting the robots, like, do all the coding work for me anyway. Well, so there's But if I could not burn tokens on this specific instance

Jonathan Hall:

I was gonna say

Shay Neymad:

I'd rather keep them for, like, generating memes.

Jonathan Hall:

I I was gonna say, you you don't need the the fixed robot since we have other robots now. You can just say, go refactor my code, Claude, and it will do it for you. But

Shay Neymad:

Yeah. And then 80% of the strikes are gonna be fine, and then 20%, I'm gonna meet in production 3AM. Cool. So this is accepted, but not marked for 01:26. So it's probably 01/27?

Jonathan Hall:

This should be a 01/27 thing. Right.

Shay Neymad:

All right. So I guess one homework thing for me is to check if the issue tracker has a GoFix thing on it. And if not, maybe I can be the one that opens that issue. There you go. Maybe finally I'll have an accepted issue after all my heartbreak and rejections.

Shay Neymad:

Another proposal we want to talk about is generic methods. And I thought we already had generic functions. So why is this like a proposal?

Jonathan Hall:

Okay. Yeah. You're right. You you you did a little little bait and switch there, didn't you? And you know you know it.

Jonathan Hall:

You know you did.

Shay Neymad:

Yeah. I know what I did. I'm like lobbing it up for you.

Jonathan Hall:

Yeah. So, yes, we do have generic functions, but we have not had generic methods yet. Now let's let let me clarify. At the moment, you can have a generic meth you can have a a method on a generic type. That's possible today, but you cannot have a generic method.

Jonathan Hall:

That is to say you cannot have a type parameter in the method definition. And the reason for that historically has been that the view of the Go team was that the reason to have methods is to satisfy interfaces. That's an important thing to to remember here. Right? Because this proposal doesn't fix that problem.

Shay Neymad:

Oh. Okay.

Jonathan Hall:

So the the the the traditional view has been the reason for a method is to implement an interface, and we can't do generic interfaces for complicated set reasons, you know, math and sets and stuff like that that we're not going to get into in this program, mostly because I don't fully understand it. But

Shay Neymad:

Yeah. Me me neither.

Jonathan Hall:

The the point here is generic methods on an interface are quite complicated slash impossible, like, logically speaking. However, the Go team has come around or or potentially come around parts of the Go team. This is still a proposal. It's not accepted yet. But the the thinking has started to shift that maybe there are other reasons, legitimate reasons, to use methods that don't necessarily implement an interface.

Shay Neymad:

Yeah. Because you can have a method that doesn't implement an interface. Like, that'll compile and work. Sure. Yeah.

Shay Neymad:

Yeah. But you don't have to implement an interface to have the method. Right. This offers let's say I have, again, class a and method b. Now method b is a class.

Shay Neymad:

You know what I meant, Scott. Whatever. Receiver. There you go. Okay.

Shay Neymad:

Is the word I'm looking for. Right? Yeah. I'm sorry. I'm just so Java brained.

Shay Neymad:

Yeah. Well, we'll not talk about it this episode. But you have I'm about to say class again. You have the receiver. Yeah.

Shay Neymad:

It may be generic or may not. Right. And then you have the method, and now the method may be generic. So the method might accept the type T as well. Right.

Shay Neymad:

I'm sort of wondering how does that work? Does it actually create now it's just a proposal, so it doesn't work yet.

Jonathan Hall:

But Here with yeah. With a proposal, you can create a method that has its own type parameters, so unrelated to the receiver's type parameters that may or may not exist.

Shay Neymad:

And same same as normal generics, I can pass the type in the square brackets or or I can ignore it if it can be inferred.

Jonathan Hall:

Right. Cool. The limitation is that the these methods, these generic methods, will never satisfy any interface, except any, I suppose, you know.

Shay Neymad:

Other than the any interface.

Jonathan Hall:

Exactly. Right.

Shay Neymad:

Not confusing at all. A great way to phrase it for an audio show where you can't show code. It doesn't satisfy any interface other than the any interface.

Jonathan Hall:

Yeah. Yeah.

Shay Neymad:

But if you can't I mean, you can't define generic methods anyway, so on an interface. So the only problem is if you have a name collision on this on this method, so it can't be like get in the interface and then a generic get method in the implementation.

Jonathan Hall:

Right.

Shay Neymad:

Well, you could just name it like getT, right?

Jonathan Hall:

And importantly, I think this is the most important thing to take away from this whole thing. We already understand that your generic method will not satisfy an interface. It will not satisfy an interface even if your type parameter is of the type of the interface. So let's let's make that concrete. Let's say you have an interface, the stringer interface, right?

Jonathan Hall:

String that returns the type string. You could create a generic method called string that returns t. So t is a type parameter. So it could be a string or int or float or whatever. Right?

Jonathan Hall:

If you have an implementation that, you know, if you if you if you use it such that t now equals string, it still does not satisfy the stringer interface.

Shay Neymad:

Oh, so even if my, like, my at runtime, it knows because of, like, generics at compile time, sorry, that this could theoretically it looks like the normal string. Mhmm. It's not gonna accept it Right. Is what you're saying. Right.

Shay Neymad:

Okay. And this proposal is likely accept or just in talks, or where is it standing?

Jonathan Hall:

It's a new proposal. It was just opened last week. So it's you know?

Shay Neymad:

So now is the time to jump on it and put the comments that in 2035 people are gonna be reading it and be like, oh, whatever. Well, I don't I'm not reading that. That's the now is the time.

Jonathan Hall:

So the biggest thing I got from this was understanding the history about why we don't have generic interface or generic methods.

Shay Neymad:

Yeah. You don't you still don't understand.

Jonathan Hall:

I don't I don't lie

Shay Neymad:

to me.

Jonathan Hall:

I don't understand exactly the the math behind why they are not allowed. I do understand there's a legitimate reason. It still annoys me that they're not allowed. I really want generic methods, and I don't think this is really going to satisfy me. I mean, I'm in favor of this proposal.

Jonathan Hall:

I think it's better than nothing, but I don't think it's getting close enough to useful for most cases to really be a big deal.

Shay Neymad:

Yeah, I can get that. I mean, I don't see myself using it, but when I'll reach to it, it'll be nice that it's there. Like, if I were to implement this, I'd expect it to work and I'd be surprised that it didn't. Yeah. Yeah.

Shay Neymad:

But the link is in the show notes, which is on your whatever app that you're listening to right now. So if you do have an opinion about this, this episode comes out now. It's gonna be like a week and a day old. It's a good time to jump on the thread and be like, oh, I'm I'm gonna use this for this in this case, and I don't like it for that and those reasons, blah blah blah. That's it for our news section.

Shay Neymad:

Let's jump to our sponsored ad break. What? Welcome to our ad break. This episode is sponsored by Quantcast, who are also hosting it live. And here's a Quantcast representative to tell you all about him.

Quantcast:

Thank you, Shay. Talk a little bit about Quantcast here. As I've mentioned, we're a twenty year advertising company. We are focused on solving very hard, large modeling and software engineering problems and making that very, very easy for our customers. So we look across the entire internet.

Quantcast:

We bid millions and millions of times a second and use a large number of different models and machine learning algorithms that we've applied in order to figure out what is the best bid on each one of those requests. We do this in a way that we can then very easily explain to our customers. So any company out there that has a product to sell, something they want to make people aware of, can very simply and cleanly understand how to set up and run that campaign. It's a lot of fun. We have experience with several different projects where we are using Go as the base, processing, getting millions of requests a second, many, many petabytes of data a day.

Shay Neymad:

If you're listening right now, what does Quantcast have to offer for the average Go developer who's listening right now? Are you hiring per chance?

Quantcast:

Yep. We do have a few offer positions open for software engineers and for machine learning engineers. If you are listening online, you can find us at com/careers.

Shay Neymad:

We'll have the open positions. Thank you so much for sponsoring Cup of Go and hosting the meetup. Woo. Thank you. We're not gonna do our usual ad break stuff this ad break because you it's sponsored.

Shay Neymad:

I'll just say thank you to all our Patreon supporters for helping us support the show, and you can find all the links, all past episodes, the swag store, including the stickers, the hats, the hoodies, etcetera, at kapago dot dev. All the links are there, and to email us, it's news@kapago.dev. That's news@kapago.dev. Let's move on to our three year celebration or do we have anything else for the ad break?

Jonathan Hall:

Nope, I think we're ready to go.

Shay Neymad:

All right. So if you've been following Cup of Go for a while, we've been doing this show for three years. Our first episode was, 01/23/2023. Things were so different back then. We were like six Go versions, before this one, which is three years.

Shay Neymad:

That works out right. We were just talking about the telemetry debacle. We were both living in different countries, Jonathan was living in Europe, I was living in Israel, we're both in The States now, so everything changed basically during these these, three years. I think we we've gotten a little better at doing the show, but we've asked some of our listeners to just send in some voice notes with some feedback about the show, just as a sort of way to involve the crowd and say, like, thank you to our listeners. Like, 50 of the reason I do this other than learning Go.

Shay Neymad:

So thank you, listeners. Jonathan, who do we have, like, on the line? Although this is not online at all, this is, like, a super prerecorded thing.

Jonathan Hall:

Yeah. Super prerecorded, not live at all. First, Pato Wittinglow.

Pato:

Hey, Shay. Hey, John. Happy Cup O Go anniversary. Pato coming in from Argentina here. Longtime listener.

Pato:

Been with you since the first episode. And just wanna say I really enjoy the podcast. Particularly enjoy the sort of dynamic you two have, oscillating between approval and disapproval of Linux and the tolerance for Python and non tolerance, if that's even a word. But, yeah, really, really dig at the stuff. Keep it up.

Pato:

And, yeah, here's to another year of Cupago.

Shay Neymad:

Wow. Thanks, Peyto. Think the word you're looking for in terms of Python is hatred. We're also leading between toleration and hatred of and, yeah, it's super cool to have a it's super cool to have a listener from, like, Argentina because I've never been to Argentina, and I know, like, a couple of people from there, but it's like, it's crazy how worldwide the show has gotten. Like, whenever I look at the stats and there are peep there are like people listening for for me, one good example is there are many listeners from countries where I could never fly to because I'm like Israeli and they could never fly to Israel because they're, like, from enemies like, countries that are enemies, but we're all, you know what?

Shay Neymad:

Together from, I don't know, Yemen and Israel, together, we can all hate on dynamic typing, like, together as a society.

Jonathan Hall:

Let's all let's all hold hands and sing Kumbaya as we hate on dynamic typing.

Shay Neymad:

I mean, unironically, is kinda cool that I would never, like, meet these people in real life just because of the the countries we live in, but they can listen to my podcast and, like Yeah.

Jonathan Hall:

Alright. Well, Pat Pato wasn't done. He had another aside here that he sent after that.

Shay Neymad:

Oh, did.

Pato:

As an aside, I wouldn't mind more out of the ordinary Go content, like using Go in unexpected places like graphical user interfaces, using GPUs. And I I mean, not not your typical LLM, but something more out of the box. So yeah.

Jonathan Hall:

So I agree with Pato. I mean, I think we both do. We we like to find these unusual stories, and we we, you know, we do talk about them occasionally. Last week, we talked about Gopher JS, which is a little bit of unusual thing. A listener reached out to me a few weeks ago who works at a gaming company, and I'm trying to get him on the show.

Jonathan Hall:

I don't know if he's gonna be able to come on. It depends on his PR department at his company, but he's using Go at a gaming company. I won't say names until everything's squared away. But, yeah, we're looking for those sorts of things too. And if you're a listener and you work in with Go in some unusual capacity, please reach out.

Jonathan Hall:

We'd love to have you on the show.

Shay Neymad:

Yeah. My the my some of my most memorable interviews that we've done has been there was one guy who did Go for DNA. Do you remember that? Yeah. Like encoding DNA into JSON using a Go library.

Shay Neymad:

I was like, man, that's dope. I can read the code and like understand DNA. I had a few days when I walked around, I felt like I can see the matrix. And then I actually tried to read the code. It was super complicated.

Shay Neymad:

And of course we've had I think we have an over representation of people doing GUI applications just because Andy is such a friend of the show and he covers for me a few times, so fine comes up way more than I'd expect it to. But yeah, if you have any Slack channel is cupago and the gopherslack, So if you have any suggestions for, oh, you know, we use Go in, like, submarine software or whatever. Let us know. Alright. I think we have time for a few more voice notes.

Jonathan Hall:

Yeah. I think we've a couple more here. And then speaking of of, fine voice notes

Andy Williams:

I absolutely love the Cup of Go podcast. Thanks so much both for what you've brought. It's amazing to me that I can engage on the other side of my audio player and feel like I'm learning along with you. Most of what I've learned about Go, I think I've learned about here, and you helped me to understand what I should focus on and what I shouldn't. But mostly, it's just fun to hear the conversation, to feel like I'm part of a community that's growing here.

Andy Williams:

Plus, you're both a lot of fun, and I look forward to another live episode when we can catch up face to face.

Shay Neymad:

Alright. So this was Whisper, like, with the Irish mode on. This was AI, the demo. Alright. Because this is, perfect Irish accent.

Shay Neymad:

Woah.

Jonathan Hall:

Woah. Woah. Woah.

Shay Neymad:

Woah. Recognize

Jonathan Hall:

that voice. Scottish.

Shay Neymad:

Oh, no. Scottish.

Jonathan Hall:

I know. That's funny. You you might not be able to talk to this guy anymore after that. Yeah. That was Andy Williams, The the he he's the guy that Shai was just talking about who who works with FINE, f y n e, the the GUI toolkit for Go.

Shay Neymad:

Yeah. Looking back, one of the things that happened during these three years, I don't know why I'm so reminiscent and bleary eyed right now, but was like while we were recording these weekly episodes, I had to drop for a little while because there was like a little tiny war going on where I was living. And Andy covered for me like three episodes, I think, or something.

Jonathan Hall:

Could be. Yeah. That's about right.

Shay Neymad:

So hugely appreciated. And I met him here in San Francisco. It was one of the meetups. Yep. So chance to meet nice people.

Jonathan Hall:

So one more here from, Jamie Tanner.

Jamie Tanna:

Happy third birthday. The thing that I love the most about the podcast is the mix of news and interviews. In particular, on the news, it really is great just like getting a chance to hear what's going on in community, in the ecosystem without necessarily keeping an eye on Reddit, Hacker News, all the other places that these sorts of things can be in, especially as someone who isn't necessarily as much work on Go directly at the moment. It's been really great. Keep up the amazing work and look forward to the next year.

Shay Neymad:

Wow. Thanks, Jamie.

Jonathan Hall:

Yeah. Oh, shucks. I I I never considered that I might be somebody substitute for Reddit. That that's that's actually feels pretty good.

Shay Neymad:

Taking we're taking food straight out of YC's mouth, the poor the poor people at YC. How do you summarize three years of doing the podcast, John?

Jonathan Hall:

Wow. So I never thought we'd doing it for three years later, for sure. That's that's the first thing that comes to my mind. What else? It's still fun.

Jonathan Hall:

There are weeks when I don't wanna record, but in general, it's still a lot of fun to do. So that's why I keep doing it. If it's ever not fun for, you know, an extended period, you'll you'll stop hearing my voice every week. Yeah. So, yeah, it's it's it's it's good.

Jonathan Hall:

I I enjoy I also really enjoy the the feedback we've been getting. And we get more of it as as we grow and we get more listeners. But, know, when I was at at Go West in Utah a few months ago, got some great feedback from people there. You're just thanking me for doing the shows. So, yeah, I I really enjoy it.

Jonathan Hall:

And I'm and I guess I'll keep doing it as long as I as long as I it's still enjoyable. And so thanks everybody for supporting the show and and helping to fill in when we one of us can't make it and and coming on and interviewing. It's it's a lot of fun.

Shay Neymad:

Yeah. And the all the Slack channel lurkers, we we also see you. Thank you for just reading all the messages and never contributing anything. The the fact that the numbers are high, it's also a nice side effect. I'll say that I'm also surprised we're doing it after three years, but that it definitely helped me, like, stay on top in many other things that I'm doing, like, as engineer.

Shay Neymad:

Just help me like remember, oh, and be like, oh, you know, in Go they just released this new thing, so maybe at work I can implement it here or there. So as long as I'm I think as long as I'm professionally programming, I'll take this, you know, try to keep up with the language I like the most on a weekly basis thing. Maybe not a podcast, maybe not a blog, I don't know how, but this has been like a good habit to have, like once a week, go over all the boards, go over notes and like stay sharp on stuff. It's given me a distinct advantage. And, yeah, it's also fun to do it with you.

Shay Neymad:

So that's been a benefit.

Jonathan Hall:

Yeah. Awesome.

Shay Neymad:

And that's it for this week's program. Thank you everybody for listening.

Quantcast:

Goodbye.

Shay Neymad:

Program Exit Up. Goodbye.