🎣 Conference roundup, http3, DataDog and Turso do optimizations
Welcome to Cup o Go. This show is supported by you. If you wanna learn how to support, find our Slack channel, find our email, our swag store, or anything else, please visit us at cup0go.dev. That is cup0go.dev. If you're a regular listener, there's no ad break anymore, at least for this episode.
Shay Nehmad:Let's kick it off. This is Cup of Go for 07/26/2025. Keep up to date with important happenings in the Go community in about fifteen minutes per week. I'm Shay Nehmad
Jonathan Hall:And I'm Jonathan Hall.
Shay Nehmad:Hey, John. What's up?
Jonathan Hall:Hey. Caught a fish, kind of. I I did. My son kind of caught a fish.
Shay Nehmad:That's that's a good start. Email or or physical? Yeah.
Jonathan Hall:We went we went fishing, the the old kind of fishing with, you know, a rod and a reel. And it was a terrible day for fishing. The fish were not biting. But our neighbor on the dock caught one, headed on the line, let my son reel it in. So my son got to say he caught a fish, little six inch rainbow trout.
Shay Nehmad:Awesome. That's a good reason to take a break. I was camping out in Lassen National Park, and my daughter played in snow for the first time in her life.
Jonathan Hall:Nice.
Shay Nehmad:And she was super excited and sinking like, let it go, you know, let it go.
Jonathan Hall:Yeah. She loved Of course, why not?
Shay Nehmad:So we took a break. We took a week off. We appreciate you. I don't know how you managed to survive without us, but there's a lot of news news to talk about. We wanted to do a conference roundup, so kick us off, Jonathan.
Jonathan Hall:Yes. We've got a bunch to talk about. First up, in Manchester in The UK, Jamie Tanner, listener in front of the show, is doing a hands on dependency workshop at Fatsuma. That's on Wednesday, July 30. That's just next week.
Jonathan Hall:So if you are in or want to be in Manchester, check that one out. Link in the show notes. Next up, FINE Conf twenty twenty five. We've talked about it before. We've talked about it last year.
Jonathan Hall:Andy Williams, also a good friend of the show, is organizing this one for FINE, the GUI library and framework for Go. They're still looking for some speakers. The conference takes place September 19. If you'd like to speak though about FINE or something related, let Andy know. They're just looking for speakers and they'll help cover your cost of travel if you need that.
Jonathan Hall:So, yeah, if you'd like to be in Edinburgh, Scotland, either to attend or to speak, reach out to Andy Williams. Link also in the show notes.
Shay Nehmad:So these are two conferences by friends of the show, but there's also the Wiki.
Jonathan Hall:There's also the Wiki enemies of the been going on there. Theoretically.
Shay Nehmad:Yes. Enemies of the show. Enemies of the show.
Jonathan Hall:Rust conferences have no. No.
Shay Nehmad:I don't think the Rust the Rust conferences are enemies. I don't think so. Except like the Erlang, the Clojure, the JavaScript, the Python. Don't know. Rust and Go people are friends.
Jonathan Hall:Alright. So anyway, the Go Wiki forever has had a page about conferences. I used to just check that every week. It rarely gets updated anymore, so this is not really a Wiki, but it's been updated recently. So I'm gonna breeze through these.
Jonathan Hall:Next up, we talked about this on the last episode. Go South Africa is happening August. It's an online conference, so you could attend even if you're not in South Africa. GopherCon UK is happening August in London. GopherCon, just GopherCon.
Jonathan Hall:I guess it's GopherCon US, but it's the original.
Shay Nehmad:It's just like Prince. Yeah. It's happening in New formerly known as GopherCon.
Jonathan Hall:This one's happening in New York City. That's in The United States, for those of you who don't know where New York City is. That's August. August is a busy month for Go conferences. GovrCon India will be happening September.
Jonathan Hall:Is that Jaipur or how do you pronounce that that city? Do you know?
Shay Nehmad:I actually have someone who speaks Indian right next to me. So let me ask one second. Okay. Parin, how do you pronounce Jaipur?
Jonathan Hall:Jaipur.
Shay Nehmad:Jaipur. Jaipur. Okay. Thank you, Parin. You are you are now on the forever on the episode of Cup of Go for this poor guy just sitting next to me in the office.
Jonathan Hall:Go for Con India will be coming up September 1415 in Jaipur, India. Go Lab will be happening in Italy on October '7 in Florence, Italy. Go West, we talked about this a couple episodes ago. We had the organizers on the show. This is happening.
Shay Nehmad:So what is the Go West conference? Yeah. So, we wanted to create a conference that's more accessible to, a lot of people, because, a lot of people can't really afford to go spend, you know, $5.06, $700 to attend a conference. Right?
Jonathan Hall:This is happening October 24 in Lehi, Utah. That's also The United States. And the last one for now, Go For Gun Africa will be happening. Not to be confused with Go South Africa. This is Go For Con Africa.
Jonathan Hall:They're two different conferences, August 2425 in Lagos, Nigeria. I think I'm done.
Shay Nehmad:One thing I'm excited about in Go For Con India is they are hosting other than the I think the the call for papers is still open and I think they're also still looking for sponsors. But the it's a first that I see. They have a language roast.
Jonathan Hall:Uh-huh.
Shay Nehmad:So they're gonna do a debate on like which programming languages
Jonathan Hall:is the
Shay Nehmad:best or whatever. Just like lighthearted roasting and and laughs.
Jonathan Hall:That sounds fun.
Shay Nehmad:I mean, likes doing it anyway. So
Jonathan Hall:Yeah. Of course. Why not why not make it part of the conference and make it official?
Shay Nehmad:Yeah. That's actually a cool idea. Yeah. August is busy. I would I'm, like, surprised because it's, like, exactly the weeks where kids don't have any, any more camps or whatever, the last weeks of August.
Shay Nehmad:We highly recommend going to these meetups and conferences if you can, if you have the time. It's a great way to network and meet all these people, especially if you submit a talk and you actually show it. It's good for a lot of reasons. Recently, we found out that one of them is that you can talk about the Cup O'Go podcast in the meetup or the conference, and then more people listen to the show. Yeah.
Shay Nehmad:But it's good. There's a long, like, archive here. I love how there's, like if you want to know, like, when the Go conference in Tokyo in 2013 was, you can find the link. I don't know. Maybe it's useful.
Jonathan Hall:Alright.
Shay Nehmad:But there are still a lot what I'm saying is there are still a lot of call for papers open. So if you have any cool things to share or you need some motivation to write the thing, you could definitely use that.
Jonathan Hall:We will probably mention some of these again as they become closer, but don't count on it. We'll we'll try to remind you of the important ones so you don't forget, but we don't wanna just be talking about conferences. Let's talk about some actual Go news.
Shay Nehmad:Just one before, if you do like our friends of the show, Jamie and, Andy, if you have a meetup coming up or you're arranging a new group or whatever, feel free to just contact us at the Slack group and we'll, like, we'll promote it for sure. Yeah. No problem.
Jonathan Hall:That's how two of the ones we mentioned today came up from people just telling us from the
Shay Nehmad:And the conference I set up in San Francisco was basically it happened basically because of the podcast.
Jonathan Hall:So you
Shay Nehmad:know what I mean? We're all for it. Right.
Jonathan Hall:So I've been hearing a lot about this Web three thing. Is that old news now? Maybe it is because I think we're talking about AI these days, but AI is the cool news. That's what this is. Right?
Jonathan Hall:HTTP three. It's Web three. It's Web four. I'm so confused. What is this proposal?
Shay Nehmad:It's web forehead. It's where I place my hand whenever someone no, no, it's not web three. It's HTTP three. Oh. That's what this proposal is about.
Shay Nehmad:So, Damien Neal, I think they're a member of the Google team, at least their email is at Google dot com, has a proposal to add HTTP three client and server implementations. And it's sort of like this progressive, implementation of a thing in the standard library where there's a proposal to start with x slash NAT slash internal slash HTTP three. And then, like, once it's mature enough to walk on its own, you know, you move it to h u p three for to x slash NAT slash h u p three. And, you know, from x to the standard library is a much taller order, but I consider X, we talked about this a few times on the show, like things that are internal inside the X library, they're pretty stable normally for normal usage. If you want to use HTTPthree, you could do it once this proposal is done.
Shay Nehmad:So this proposal has been open since, late twenty twenty four, almost half a year now. And two days ago, it's been added to the active column of the proposals project. Since the beginning of the year, there's been a lot of, like, change lists implementing, like, this thing in the internal h t p three library, and I think this means that it's, like, it's it's maybe ready to get promoted, or at least they wanna consider promoting it and see what they need to do to clean it up. What is HTTP three, though? Like, why would we even want it?
Jonathan Hall:Yeah. I was gonna ask, what is it and why would it not be included? I mean, if if
Shay Nehmad:So I wanna explain it in terms of, HTTP one and two. So if you don't know HTTP at all, this might be a bit confusing, but we can do like intro to networking 101 in a fifteen minute show. So the big change is that HTTP one and HTTP two use TCP, but HTTP three is built on top of the QUIC protocol, uses UDP. Actually, funnily enough, the best way to understand it is to actually read the RFC, which is super rare, right? Usually when you read an RFC, you're like, what the hell is going What are all these details?
Shay Nehmad:Oh my God. But the intro to the RFC, to the relevant RFC, is nine one one four, explains it the best. It's like HTTP semantics, things like GET and POST and resource stuff, right? And the status code, like 200 is okay and four zero four is not found. They're pretty good.
Shay Nehmad:HTTP one was a problem because it's like white space delimited text fields, right, for the HTTP messages. So it's really hard that while you can read it, like, to ton of complexity when parsing, which we mention all the time on the show. Right? Oh, security Exactly. Vulnerabilities in Yeah.
Shay Nehmad:And also it doesn't have multiplexing. Multiplexing meaning you can have, like, multiple connections on the same connection sort of thing. Because it doesn't have the h t p one doesn't have that, you need to open multiple TCP connections. And TCP, the protocol, beneath the HTTP in the in the layers, if you open multiple connections, they don't share parameters between them. So things like congestion control and things like, you know, just network efficiency, they don't actually get utilized.
Shay Nehmad:TCP assumes that, you know, the app above it will properly use that connection between the client and the server, but you end up opening 15 connections to the same API endpoint because you wanna render 15 things on the page. This was HTTP one. HTTP two has binary framing, and a multiplexing layer, but because it's on TCP, on top of TCP, the multiplexing ended up being, taking a big hit in reality because if one of the streams in the multiplex, in the multiplex connection gets like a TCP packet loss or a retransmission, they all wait because they're all in the same TCP connection. So it's sort of like, it's better because it's binary and that's way better. And it should improve latency, but you end up like all these fast cars are waiting in the same light.
Shay Nehmad:You know what I mean? The same off ramp. So it tends to have a stall. And if you have tons of active transactions, like, let's say that it's a web page, 50 API calls to the same server at the same time to, I don't know, render maybe a very complicated dashboard in an SPA or something, h u p two tends to perform worse. Right?
Shay Nehmad:And it's completely opposite to what you would think. It's like, oh, but it has multiplexing. Yeah. But actually, it's better to open 50 network connections, instead of having all 50 of them go through one. Since then, there's a new, transport protocol, called QUIC, q u I c, the technical details of which are absolutely fascinating, but I can't explain them.
Shay Nehmad:I need, like, three hours, honestly. But they have use UDP on top. So you don't have all this, like, retransmission, blah blah blah. Just send it because you prove prove like, provide the reliability at the stream level and the congestion control is across the entire connection because UDP doesn't really have the concept of connections. Right?
Shay Nehmad:It improves the performance of HTTP compared to like TCP map. It's also more secure because it has TLS 1.3 at the transport layer. So it has a lot of benefits and practically it's just faster. Like all of these things end up to it being more efficient. You get like, you don't have the setup latency of a TCP because it like does TCP fast open.
Shay Nehmad:Like always, when you talk about protocols, the devil's in the detail, right? There's a lot of things you need to take care of and push promise and caching and gateways and go away and like, I mean, there's so many details here and so many security vulnerabilities just waiting to get discovered, you know? And you have to, like frame types and error codes and blah blah blah. So there's a lot of detail. The proposal and all the change lists attached to it are basically let's implement it in Go.
Shay Nehmad:There is a package called QuickGo, but it's not part of the standard library. And things like HTTP implementations, think it sort of intuitively makes sense why it should be part of the standard library. Right? That's where we're at right now. There's a lot of change lists for the internal, implementation.
Shay Nehmad:And if you actually open up the change lists themselves and look at the details, I mean, it's not simple. You know what I mean? It's not easy to to understand what's going on. And there's like to dos in the code. Oh, defer, cancel, read.
Shay Nehmad:I gotta parse it. I need to detect panics, like consider tracking the never index status of headers with the n bit set in their queue pack encoding. I mean, it's a very, very detailed sort of work to implement these protocols. If you're interested in that sort of stuff and maybe you wanna read this and read the spec and make sure they did it correctly, like these changes are open now and you can find the latest ones in the proposal. And I'm excited to see what will happen now that it's moved to the active column.
Jonathan Hall:Yeah. Is is there any pushback on this proposal? Like, there anybody saying, no, no, we shouldn't put this in Go or not yet? Or is it more just hashing out the details about how to do it?
Shay Nehmad:So actually, it's just Neil like, it's sort of an umbrella proposal where Neil said, we're gonna do this, and then, Gopher bot is like, here are all the change lists. Now, there's a there's a open issue for, like, implementing HTTPthree in the standard library. In 2019, it was a draft. Oh, this issue was opened in 2019, right, by Johan Branderhorst Satzkorn. Yeah.
Shay Nehmad:Actually from Canada, so I don't know. But it's like, there there is an implementation of a quick go, like existing one in pure go, and the discussion started like 2019, and then you scroll down to the most recent thing, it's like 2024, and the quick implementation is already not in internal, so it's just very progressively going forward. The actually, there's no pushback. The only thing was like, hey, in 2023, someone's like, all the major browsers already support h t p three, why don't we have this already? So, you know, it's like, I mean, there's been a lot of discussion, especially when it got started.
Shay Nehmad:But the thing was like, you know, we don't wanna put it in the standard library before the spec dies down and everybody implements it and all the smoke clears up. I think now we're at that at that point. Like, back in 2020, it wasn't even finalized by the IETF, so putting it then wouldn't be a smart idea. You know, Go standard library is not quick to adopt all these new technologies. Now it's not a new technology anymore.
Jonathan Hall:It's not quick, but I'm ching. Ah, nice. So I guess this will be in the next version of Ghost since all they have to do is tell Claude that they want HTTP three and it'll just spit it out. Right?
Shay Nehmad:Don't even don't even wanna, you know? Actually, the the scariest part is how how much of the spec has been written with AI, right? The code is the easy part, but if someone was like, I don't I don't wanna worry too much about the details of TLS and QUIC, Somehow, I feel like the people working on this proposal take their jobs slightly more seriously than that.
Jonathan Hall:I hope so.
Shay Nehmad:All building the Internet.
Jonathan Hall:We've got a couple more items to talk about a little bit quicker,
Shay Nehmad:I think.
Jonathan Hall:The next one is
Shay Nehmad:Wake up.
Jonathan Hall:Uh-huh. Okay. So the next one is from Datadog. Datadog had a blog post, how Go one point two four Swiss tables saved us hundreds of gigabytes. Now when I first read the headline, I thought, oh, I understand this story.
Jonathan Hall:They do a Swiss tables thing, which we talked about in the past briefly, the way they do the new implementation for maps, how hash mapping works in Go, saved a bunch of memory, that's cool. So I started reading it and they start by saying, We had some terrible memory regressions in Go 124. Like what? This is the opposite of what I was expecting to read. So they upgraded from 123 to 124 and their memory usage got worse and they started investigating, working with the Go team and they did find the regressions and solve that.
Jonathan Hall:But in the meantime, once they solve the regressions, they noticed that some of their services were using much less memory than before. And it turns out that's because of these this new Swiss tables implementation. So the article goes into some pretty low level detail like bit mapping of memory registers and stuff. So if you're into that sort of thing to want to understand the nitty gritty of why, I'm not going to read that to you. You have to go read it yourself.
Jonathan Hall:But I thought just the TLDR was interesting. They went after a regression, which was using much more memory process and ended up saving a ton of memory as well in some cases. That's kind of a fun story if you like tech sleuth stories.
Shay Nehmad:It is, it looks detailed and super well written. Like there's charts explaining the old table and the new table and the hashes and the addresses and the groups. Very, very cool. So they upgraded and it made it worse, but then they fixed the part where it got worse and got better. So overall Yeah.
Jonathan Hall:Overall, a net win.
Shay Nehmad:Yeah. Net win for the Swiss tables. Right? Yes. Yes.
Shay Nehmad:One other thing they mentioned is that they use the Go community a lot. Like, they collaborate a lot with other people in the community, which is pretty cool from from, Datadog. They've, reached out, and now they're sharing their results as well. That's the way to go when you're a big company like Datadog to make sure that the ecosystem you use is actually you know what I mean? It's like they they give back sorta.
Shay Nehmad:That's what I I
Jonathan Hall:It's one
Shay Nehmad:of the
Jonathan Hall:nice things about open source is, everybody benefits from from changes like this.
Shay Nehmad:And they have a few tricks as well, like setting the go memory limit and looking at obviously, being Datadog, they're like, oh my god. Runtime metrics and and profiling were critical to our investigation, which you can do with Datadog. Baa, ba, ba. But the bottom line is they reduce 70% in map memory usage, basically without changing the logic.
Jonathan Hall:Yeah. Yeah. That's pretty amazing.
Shay Nehmad:I also have a company who did, like, a optimization blog post. Again, we're not gonna go super deep into the detail, but Terso Tech, they do, like, I don't know if you heard of it, but it's like SQLite for every they spin up, like, a tiny SQLite instance for every AI agent in your thing. Okay. And they reimplemented SQLite in Rust. Okay.
Shay Nehmad:Yeah. Kinda kinda cool. They have some some very techy things going on. I haven't actually used it, but they had a headline that, like, caught my eye. I was like, We rewrote large parts of API in Go using AI.
Shay Nehmad:I was like, Oh, cool. Did they write like a language generator or a tool or whatever? No, it turns out the developer is called the Avinash. So it's Avinash Intelligence. Okay.
Shay Nehmad:They got the clickbait, but they like had to fully rewrite their API, just because of performance issues. They have a thing where they have a database per agent and then people started using a ton more agents and more AI and whatever, so they had a lot more tiny databases to set up. And they used a trick we shared in the show called interning.
Jonathan Hall:If you
Shay Nehmad:remember, we mentioned it with a pretty recent thing. The blog post, I think was 2024, maybe it's not that recent, almost a year ago, Jesus. But we actually took our sweet time reporting that. But they used unique. Handle because you know, it's the same user talking to a different, DB.
Shay Nehmad:So it it was it made sense to intern, like, the app, and that saved them a ton of memory. And the second thing they did as a SQLite company is, okay, we will, like, do a cache and we will store the, you know, the the second layer of that cache, we'll store it in SQLite. And the cache miss is, like, very fast because they use like fast disks instead of keeping everything in memory because they want to scale to a billion databases. So just a these are way I think way more normal and useful tricks to deal with like memory issues in Go. Datadog obviously have like real huge company problems.
Shay Nehmad:Yeah, yeah. This is slightly more basic. So if you're earlier in your like scaling out journey, maybe this blog post is useful for you as well. All about managing memory. People don't have enough memory.
Shay Nehmad:Why don't they just download more RAM?
Jonathan Hall:I can't remember why I didn't do that last time. Went fishing. Went fishing and forgot everything I knew.
Shay Nehmad:Alright. No ad break. Let's jump to the lightning round. Let's do it. Lightning round.
Jonathan Hall:First up in the lightning round, you probably remember a few weeks ago, we said we're never gonna talk about error handling again in Go. I'm breaking my word. We found something by Daniel Harp. He posted on LinkedIn a few weeks ago, two weeks ago, that the Go team has given up on error handling and that kind of upset him a little bit. So he decided to just write his own version of error handling.
Jonathan Hall:I'm not sure what problem that really solves, but it's kind of neat to see someone try this. He implemented a throw operator. So anybody who follows Go on social media probably already knows this has happened, but the Go team, specifically Robert Grisemere, has published a post about this error handling in Go. TLDR, they've we've been talking about improving error handling for years with dozens or hundreds, possibly thousands of proposals directly or indirectly related to it and cannot get anywhere close to consensus. So Go team has decided for the foreseeable future, we will stop pursuing syntactic language changes for error handling.
Jonathan Hall:We'll also close all open and incoming proposals that concern themselves primarily with the syntax for error handling without further investigation. It's not what you think. It's not like try catch or whatever. It's a little bit different than that. You don't even have to write the word throw, use the caret and basically use the caret in place of the error value in an assignment.
Jonathan Hall:Whenever that gets assigned to, it immediately returns. So there's a link in the show notes to to his code. It's working code. It's a fork of Go. You can install it if you want to.
Jonathan Hall:It's just kind of a cool thing to look at. I don't I don't imagine anybody's going to use this for production stuff since it's an unofficial fork of Go, but it's kind of a neat thing to look at. So that's that's mine.
Shay Nehmad:The I I love the comments. This is, so LinkedIn coded. People are just like, I think a language like Java will be more suitable for you. There's nothing wrong with Go's verbose error check. I I actually think LinkedIn is a SciOp parody site, and they're just waiting to let
Jonathan Hall:us know.
Shay Nehmad:I like it.
Jonathan Hall:It's cool. It's it's
Shay Nehmad:a cool, thought experiment.
Jonathan Hall:Yes. Exactly.
Shay Nehmad:My Lightning Round, bone to throw is it's the reason it's Lightning Round and not a main thing, it's because not actually about Go, it's about Kubernetes. But I assume a lot of our listeners are actually like sort of platform engineers, DevOps kind of people just because a lot of the people working Go tend to be that sort of person. So there's a pretty well written blog post by Ahmed Al Balkan, I hope I'm saying that correctly, about the Kubernetes list API performance and reliability. They run hundreds of thousands of bare metal servers over hundreds of Kubernetes clusters. Jesus.
Shay Nehmad:And just the API call to list the resources has some pretty funky defaults with, like, pagination and watch cache, which make it when you combine them both, it makes it, like, super slow. And then it's a pretty cool blog post because it lists, like, some upstream improvements in, like, some various versions and lists like, points you towards the actual GitHub discussions. And finally, it's, the recommendation is upgrade your clusters, enable audit logs, and, like, you know, use these privileged RBACs, experiment with a GoGC environment variable to tune garbage collection and cube API server processes. And they were like, we found that setting it to 200 is better than not setting it at all. I mean, a useful trick.
Shay Nehmad:If you end up managing so many Kubernetes resources, look back at your life, see what you did wrong, and choose another profession. But as long as you have to deal with it, I think this blog post could be useful for you. Also, like, pretty well written. Alright.
Jonathan Hall:Well, I think that wraps it up. No, break today. Enjoy your Following
Shay Nehmad:your feedback.
Jonathan Hall:Yeah. See you next time.
Shay Nehmad:Program exited.
Creators and Guests

