Cup o' Go

Happy Sukkot ๐Ÿ•๏ธ! Find John & Shay at cupogo.dev, where you can find links to our Slack channel, Swag store, Patreon community, and the entire Cup o' Go episode archive.

Creators & 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:

Show is sponsored by you, our listener. Stick around till after the news to hear more about that. This is Cup of Go for October 18, 2024. Keep up to date with the important happenings in the Go community in about 15 minutes per week. I'm Jonathan Hall.

Shay Nehmad:

And I'm Shay Nehmad.

Jonathan Hall:

Hello, Shay.

Shay Nehmad:

Hello. I am very much dreading the the date tomorrow.

Jonathan Hall:

Why is that?

Shay Nehmad:

It is my 30th birthday, and it's just too round of a date for me to not worry about bugs. Like, is it actually my 30th, or did we miscount a year because of a leap day? Then you start reading about leap seconds, time zones, the government, in Israel changed the, you know, the, like, daylight saving times, a couple of times over the last 30 years. I'm wondering if it is my 30th or is it just a misconception. So, yeah, I'm worried about dates because I'm a programmer.

Shay Nehmad:

And nothing else is scary about, growing up. Let's talk about conferences.

Jonathan Hall:

Yeah. So today, we're gonna talk about a couple, meetups, some proposals and blog posts. We don't have a whole lot of, like, hard news, but we're gonna we're gonna still talk about what's happening in the Go community.

Shay Nehmad:

Hard news like we usually We usually have the deep break. Politics, the economics of GoLandia. Exactly. No. No.

Shay Nehmad:

That's not us. Let's nitpick about, Linter choices for for a little while.

Jonathan Hall:

Let's do it. So, yeah. As you mentioned, con they're not really conferences, but but meetups. A couple that came onto my radar, if you're in Dubai and, who doesn't wanna be in Dubai? It's a beautiful city.

Jonathan Hall:

The, the first apparently, ever go UAE meetup is happening on the 26th.

Shay Nehmad:

Oh, cool.

Jonathan Hall:

I'll have a link to that in the show notes.

Shay Nehmad:

I can just imagine it happening on like, a 50 story golden building. You know what I mean?

Jonathan Hall:

Yeah. Yeah. Send us pictures of the event. We wanna see, how how flashy the venue was.

Shay Nehmad:

Emirates Tower. That sounds fancy

Jonathan Hall:

for sure. Yeah.

Shay Nehmad:

Well, I'm really down for the 1st meetup of a city. That's very, very cool. Guev and Rashid, let us know how it goes. And if you're going, let us know how it went.

Jonathan Hall:

Yeah. Please.

Shay Nehmad:

The topics, by the way, you said this is a meetup, but the topic list is long enough to, at least for me to say, conference. There are, like, 5 talks. Usually, for me, meetup is, like, talk, a little bit of pizza, talk, and then you're you're gone. Right? Mhmm.

Shay Nehmad:

Like a 2 hour evening engagement?

Jonathan Hall:

Usually, yeah.

Shay Nehmad:

But this sounds like a serious thing. It is lightning talks, when you read into the agenda. Every single one is 15 minutes, which I think is a better bang for your buck. Like, most people are not good enough speakers to hold the conversation for over 15 minutes, which is why that's the limit for our news.

Jonathan Hall:

And I have to say the 15 minute lightning talk. That's that's good if you're gonna do if you're gonna do just lightning talks at the meetup in Amsterdam, where I'm no longer a organizer. Lightning talks usually 5 minutes. So, yeah, 15 minutes is great for 5 talks. You're gonna get a lot of information for your time.

Jonathan Hall:

Go go to the 1st meetup in Dubai.

Shay Nehmad:

Cool. Cool. Cool.

Jonathan Hall:

And, we also have another meetup, coming up in Leipzig, Germany. This is the one I would I would have loved to attended. I I have a friend in Leipzig. I've been there a few times. I've I've missed their one of their meetups by, I think, a day.

Jonathan Hall:

The last time I was there, and made me sad. But October 29, if you're in a part of Germany, check out their, their meetup there. They have one talk a little more, 2 talks, 1 about test coverage and go and what about deterministic currency and go and go tests. So it's all about testing in Leipzig.

Shay Nehmad:

Yeah. I think it's, very, very cool to the package that they're gonna talk about. Like, test coverage, I don't know. To me, it always feels like just a chore. Mhmm.

Shay Nehmad:

Just get the thing working in CI and get the artifacts lined up. And then if you have a third party, like, I forgot what's called, Code Climate or one of the other 100 SaaS apps that wanna eat that and put it on dashboard. And then you gotta start arguing about whether coverage is correct for your project Mhmm. Blah blah blah. Is it a metric at all?

Shay Nehmad:

Should you worry about it? Blah blah blah blah. The new thing I learned, like, from reading this, the LiveSeq, top tracks is Time Stone. Looks like a pretty cool, library aimed at eliminating flaky unit tests, which yes, please. Anybody who's working on that is an angel in my book.

Shay Nehmad:

It's about, like, deterministic unit tests for, concurrent Go code when you're testing. This is pretty cool.

Jonathan Hall:

Cool.

Shay Nehmad:

I guess, if you haven't run into it, you'd be like, why?

Jonathan Hall:

Mhmm.

Shay Nehmad:

But if you have, run into flaky tests that relate to threads and things like that Oh, yeah. Like, go routines Yeah. You'd love to hear about it. And it's actually super non like, it's a super new thing, last week. Looks like, released for the talk kind of thing.

Jonathan Hall:

Oh, that's cool. Honestly.

Shay Nehmad:

Yeah. Yeah. But I'm down. I've started. Keep working on it.

Shay Nehmad:

We love these sorts of things. Yep.

Jonathan Hall:

Awesome. That's all I have for our conferences and meetups for now. If you if you're listening and you know of one coming up, let us know so we can include it in the show. Let's move on to, a proposal.

Shay Nehmad:

There are no proposal minutes from the last 2 weeks, which is totally fine. Summarizing meetings is annoying. We totally get it. There is one, proposal who that we wanted to mention that's in its final comment period and I think it's relevant for people to comment if it affects them. What do you think about HTTP codes?

Shay Nehmad:

I think they're a great invention.

Jonathan Hall:

They're a blunt instrument but they're they're good. Yeah.

Shay Nehmad:

They're just, like, very pragmatic enough. Right? 200 means everything okay. 300 means you gotta look for it somewhere else. 400, it's your fault.

Shay Nehmad:

500, it's my fault. Like, very easy. What are 100? 100. Like, onexx.

Jonathan Hall:

Yeah. Those are those are for continuation, aren't they? They're not commonly used, but

Shay Nehmad:

They're they're very much not commonly used to the point where I almost don't remember them, by heart. I do try to make a point of remembering HUP codes by heart just because they forced me to learn it by heart in the army. Mhmm. But other than that, there's literally no reason to remember the 100 ones. It's interim responses.

Shay Nehmad:

So informational things like I'm switching protocols or I'm processing if you're developing, the web dev, like, a video thing. No responses ready yet. Early hints, some kind of weird, things. But apparently, you can send, an arbitrary number of them according to HTTP. In Go's client, that arbitrary number is not infinite, it's 5.

Shay Nehmad:

Can you guess why it's 5? No. Alright. They can't either. It's just arbitrary in the code and literally above that number it says, arbitrary bound and number of information responses, which just makes sense whatever.

Shay Nehmad:

And if you're talking about, like, resumable uploads, for example, which is the background for the opening of this proposal by Marius, from Germany. He's like in the IETF working on resumable uploads where I guess, you know, the server can sort of inform the client about the upload progress and send a lot of a 100 just to let you know, oh, continue continue continue. It's it's still progressing. And then once you get to the limit of 5, you get an error and you can't even read, like, the final thing. Like, you can't get to the 200 at the end, which of which you can send only 1 in HTTP.

Shay Nehmad:

And there's a response here which sounds very authoritative. And the first time I read it, I was like, oh, this is too authoritative. Someone's like, this is a bug in the Go client. That sounds very like someone who who knows what they're talking about. Right?

Jonathan Hall:

It sounds like a a Reddit troll.

Shay Nehmad:

So so, actually, it is Roy Fiddly Right. Who, like, is the person behind the Apache license and Apache H CPD. It's like

Jonathan Hall:

principal author of the HTTP stack, inventor of rest.

Shay Nehmad:

Yeah. Yeah. So it is a bug in the Go client. And there's a bunch of the discussion here about, how to fix it, in the future, What other HTTP clients, libraries are doing. Because if you do like infinite, you're suddenly opening yourself up to slow loris attacks where someone can send you very slow, very continuous drip of 100 and DDoS your server with just a bunch of, 100 Mhmm.

Shay Nehmad:

Or your client or whatever. It's like, why do it to the client side? Like, what's going on? It's a very interesting discussion. It's, gonna be accepted.

Shay Nehmad:

And I think if you have 100 HTTP usage, like, if you ever use this code in a Go code, you should probably read this because I can't assume this is gonna be a non breaking change by the end. And anybody contributing a real use case to these sorts of discussions is very relevant. Mhmm. But overall, looks like just a bug, based on the HTTP spec. Who could have guessed?

Jonathan Hall:

With with comments from Russ Cox like, do you have a concrete proposal for a new API here? You you know this isn't just a quick fix. There's there's a lot of thought going into it. And it like you said, it's probably a breaking change.

Shay Nehmad:

By the way, if any security researchers are listening, it's not just if you're a user of this, like very niche, HTTP code, and part of the spec. Also, if you're looking to make a name for yourself and find some vulnerabilities, there are, like, 5 here. I'm not even there are 5. Just, for sure. 1 for each arbitrary number.

Jonathan Hall:

There's an arbitrary number of 5, but, yeah, there's 5.

Shay Nehmad:

Yeah. I'm I'm just sure that there's more, like, vulnerabilities in the implementation here. Getting HTTP spec right on the first try and on the second try is very, very difficult. So just an interesting proposal if you're into networking or HP and things like that, check it out. Other than that, we just have some community things going on.

Shay Nehmad:

Right?

Jonathan Hall:

We do. This could be a big topic. It came up on my Reddit radar, which was working this week for the first time in months. And I I don't know. It's it's more a discussion topic.

Jonathan Hall:

It's not that that the there was anything particularly revealing in the discussion, but the topic, the title is is go the right choice for my startup. And, I have some opinions on this. I'm curious though, before I reveal my my hand, what do you think? The criteria that the author presents are that the startup doesn't have any technical any heavy technical requirements right now. It's mostly a credit application.

Jonathan Hall:

And then, he talks about how Go is simple. It's nice at avoiding dependencies. I guess the talking about the rich standard library and maybe a static compiling. When then says that doing a CRUD in Go is kind of repetitive and boring. Would it be better to do use a language with sort of dynamic typing that makes that easier or maybe it's Harrison?

Shay Nehmad:

That has that has more problems. So it's not that it's boring to develop these boring lines of code. Well, I I don't think I need to voice my opinion. I was the VPRA in the dev of a startup, and we used Go. Mhmm.

Shay Nehmad:

Like, the the proof is in the pudding. And it's still, like, as far as I know, it's still going, strong. But language is just a tool. Right? We used Go for the back end where like, microservice back end where it made sense.

Shay Nehmad:

And we used Python for, like, AI stuff and and machine learning, things and data analysis where it made sense. And we used, React JavaScript for the front end to start and then TypeScript. The main decision point for my CDO and and me at each point was picking something that's reasonable. It doesn't have to be great. It just doesn't have to have any glaring, like, problems, like unsupported for example, when we just started, we talked about Rust as a viable option, but it was just when the Mozilla team cut the funding by half and they had, I think, that, licensing issue, and it just seems like the leadership I'm talking about, like, 2021, early 2021.

Shay Nehmad:

Just seems like Rust leadership was all over the map and and very unfocused and very weird. Hard to build a startup based on that. Right? Mhmm. So there's a first phase of filtering out languages which you can't pick.

Shay Nehmad:

Right? Because, for example, if nobody in your area knows that language, you shouldn't pick it even if it's great. If it's way way too new, you probably shouldn't pick it. Right? Unless, there's specific value for your team to use that, you you should probably not pick it.

Shay Nehmad:

And the rest of decisions are fine. And in a start ups situation, the most important thing is, for in my opinion, pick something that you know. Right? You're gonna be in a room. There's gonna be, like, 8 people there.

Shay Nehmad:

If one of them doesn't know the language, it's gonna be difficult. Right. And go, you know, use static typing, use dynamic typing. It's not gonna be the reason your startup, fails or succeeds. Once you scale up in number of developers or if you're just a person who cares about code quality and things like that, you're probably gonna be frustrated working with, languages that suck.

Shay Nehmad:

That's sort of, there's some objective things that you can point at. If installing dependencies is very slow or compiling is very slow and then Go, it's fast, then that's just better period. The I mean, there are some languages which are better than others, features and things like that, But that's less important to me than do you, feel comfortable writing Go? In, way back when in Reco, both the CTO and I knew Go, and we're like, sure. Let's go.

Shay Nehmad:

Like, that's that's good enough. Hindsight, it was great. Like, we were very happy to use it. There is a specific thing about the CRUD application that annoys me though. No matter what language I'm using, I don't wanna be writing CRUD.

Shay Nehmad:

I want it to auto generate it.

Jonathan Hall:

Yes. And that's gonna that was gonna be my main point is if this is really just a CRUD app, you can probably find a SaaS that will do it for you. Put your point, put something in your database schema and do a little bit of configuration and you're gonna have something that does 90% of what you need if it truly is just crud. And there's something that will even make user facing interfaces to do that. I don't have names on the top of my head, but I've seen some.

Jonathan Hall:

So if that's really all it is and all it ever will be, don't use a language at all. You some no code solution.

Shay Nehmad:

So I'm not I'm not sure I'm I'm that far ahead. Mhmm. I like, you could use code because it's it might be easier. It's less vendor locked in things like that, but you still 95% of the code can be auto generated. And let's, like, remember when you're using a language like TypeScript or Go, 99% of the code real code, quote unquote, right, machine code is auto generated anyway.

Shay Nehmad:

Yeah. Like, you're not actually writing anything that's running on the Mhmm. CPU or anything like that. So it's there's not a lot of difference, you know, for example, defining your API schema, which you're gonna do no matter what, or your database schema, which you're gonna do no matter what. And just pointing o API gen and like SQL c at it.

Shay Nehmad:

And then like taking 5% of the code which is main and connecting like the the queries thing to the API server thing, and you're done. Right? And this is super easy as well. This is the Go example. I'm sure you can do it in TypeScript and Python.

Shay Nehmad:

Like, I know it's possible to do in Python as well. The thing is, this is for sure something that you would wanna do regardless, even in a start up setting. Right? Like, use the correct language to talk about things. If you're talking about API, use open API.

Shay Nehmad:

If you're writing code, write some code. I don't know if I would go as far as no code because pretty quickly you run up into some limitations. Right?

Jonathan Hall:

I agree. So that's why I was saying, like, if you're never gonna do more than CRUD, then I would consider that. If you expect your application to grow to the point where you are doing something more complex, then it probably is worth building the code whether it's auto generated or or otherwise, you're doing in a language that you customize. And at that point, I pretty much agree with everything you said about which languages to choose or which ones to rule out and like the language isn't the biggest, it's not the biggest decision. Whether you use Ruby or PHP or Python or Go or Java or whatever.

Jonathan Hall:

It really doesn't matter that much. Use what you're comfortable with or what you can hire for if you're not gonna be the one building it yourself.

Shay Nehmad:

So the the poster on Reddit was like, I'm a solo dev. When you're a solo developer, at least for me, using, Go does have a outsized benefit. Because when you're in a team, I think mistakes are a bit harder to go through the filter. Right? Someone reviews your code.

Shay Nehmad:

Someone is, like, add a test that you wouldn't can tell you, like, add a test or or this is wrong, and you wouldn't do it because you're on your own. Even if you're super disciplined in the really good dev, there's a big difference between the work of individuals and teams, I think. With the work of individuals being more high risk, high reward, there's a big chance it's never gonna get shipped or it's gonna be very bad or very, very good. Whereas the more people you add to the team, I'd like you know, this is a very big generalization. But to me, it feels like the more people you add to the team, the more sort of mediocre everything becomes.

Shay Nehmad:

Yeah. Right? Because everybody's good at anything else. You have more processes. You have more reviews.

Shay Nehmad:

Things like that. When you're a solo developer, riding with, like, PHP on the server shipping, things like that Mhmm. Is a very good move fast and break things approach. Yeah. I think many solo developers choose that route.

Shay Nehmad:

And then you don't need CI, you don't need CD, you're just shipping from your laptop and whatever, you're good. And then it's a 100% about comfort. For me, Go would be super comfortable there, more than TypeScript. I I know it's more. I think the linter covers more.

Shay Nehmad:

Like, I'm just used to it at this point. But if you're a solo developer, your personal, like, skill level at a specific language is very, very relevant, at least in my opinion.

Jonathan Hall:

So I have a question for the audience if you wanna come talk about it on the, the Caprica Slack channel. When would you absolutely not use Go in your startup? What what circumstances would would make that, make Go a no go for you if you're if you're doing a startup? Or maybe it maybe that's been your situation. Come talk about it on the Slack channel.

Shay Nehmad:

The the speed of iteration, again, is is the most important part, I think. There are some actually good insights here in, threads. Like, people suggesting specific tools and dealing with JSON correctly. There is one post here that I really, really liked, which is you spend way too much energy, like, analyzing which platform, which language, like, what's gonna be difficult, what's gonna be correct, does it have enterprise problems, is it does it have a great community? Someone posted that Golang isn't always great at getting getting them into an inspired zone because it's a bit mechanical and repetitive.

Shay Nehmad:

This is not a a language feature that we can point at, right, and say, oh, Go is more mechanical than Python. For me, it's the other way around. But I think it's a good mindset to keep, like, what inspires you to write really good code. I know that dealing with databases should be done with SQL, but for me, writing SQL is very, like, mechanical, like the person said. I'm, like, immediately back to 2012 when I learned SQL for the first time, my mind just closes off on, like, trying to write the quickest, SQL query I can and jump out.

Shay Nehmad:

I'm I'm, like, 0 creative.

Jonathan Hall:

Interesting. Alright.

Shay Nehmad:

So I don't know. That's interesting. It ends up being a just a dump startup after all that discussion. It's Uber for cats. Woo hoo.

Shay Nehmad:

And Uber is in Go. So hey.

Jonathan Hall:

It's not entirely Go, is it? I know they use Go.

Shay Nehmad:

But

Jonathan Hall:

they I know they use Go. Yeah. Alright. Well, we, had some good discussions. Let's, round out the episode with a lightning round, with some new projects to talk about.

Shay Nehmad:

Lightning round. First up, do you know the loop var bug? If you don't remember it, that's great because it doesn't exist in Go anymore, and you don't have to worry about it. But, yep. There's a linter called copy loop var which was there and is you can still get it from, GoVet or Golangci lint and a member of our show, well, member of our show, member of our channel, at this point they're basically a co host with the amount of content they're writing in the, in the channel, Peter Aronoff submitted an issue about the copy loop var thing.

Shay Nehmad:

We didn't wanna get into the weeds. It's a very interesting feature versus bug situation. You might think it's a feature, someone else might think it's a bug. So there's a discussion there with some differing opinions, whether it's an overreach of the linter or not. If you care about this stuff at all, the link is in the show notes.

Jonathan Hall:

Alright, I want to talk about a tool I use and I've actually submitted a pull request for. It's called PSQL wire. We talked about databases earlier in the show. PSQL wire is a library written in go that speaks the Postgres wire protocol. Most of it.

Jonathan Hall:

So if you need to either speak to a Postgres, server directly without going through LibQ or something like that, or you want to implement your own, Postgres speaking server, you can go. This is the library for you. Check it out.

Shay Nehmad:

You didn't end up using it though. Right?

Jonathan Hall:

I didn't end up using it the way I was intending to but I have another project I will be using it for.

Shay Nehmad:

Mentioning talking to databases, let's talk to the most immortal database of all, Excel. If you are a person with a computer, you probably know what Excel is, and if you're listening to the show, you probably know Go. So you can probably do 1+1 and figure out what ExcelICE is about but it's not gonna work because we forgot to put the equal sign before. So it's just writing 1+1 in the cell now. How annoying is that?

Shay Nehmad:

So there's excel eyes. It's a thing that lets you talk to, Excel spreadsheets in Go. 3 days ago, they released, a new version 2.v2.9.0 with a lot of features. Wow. Yeah.

Shay Nehmad:

I was like surprised. A lot of bug fixes. It just looks very active with like 20, contributors for this specific version. I don't know. Maybe even more.

Shay Nehmad:

Maybe like 30. So it looks very active, has a lot of, functions and things you can do with, Excel. It also a breaking change. So if you're using it, you should probably figure out something about conditional formatting. So anyway, really cool.

Shay Nehmad:

I like, Excel. I think it's a it's a such a good tool. People often forget how many features and how many capabilities it has but it is pretty amazing. At the same breath, I wanna mention a really good, blog post I read that's called is Excel immortal? Not related to Go, just talking about Excel and sort of comparing it to a SaaS startup that does something, all these data analytics, Power BI and Tableau and blah blah blah blah blah blah.

Shay Nehmad:

And it starts with a very like fun question. Out of these 12 things, which one will no longer exist in 2075? It's like Chad GPT, Twitter, Facebook, Instagram, TikTok, Google search, iPhones, JPMorgan Chase, Notion, NFL, the American democracy, Tesla, the United States Dollar, Living Creatures of Any Kind.

Jonathan Hall:

American Democracy? That one's easy. That doesn't even exist in 2024.

Shay Nehmad:

And Microsoft Excel. So I don't know. It it's a very good, article. I suggest you read it just because it's interesting. Cool.

Shay Nehmad:

And that does it for our show today. Stick around for a quick ad break. Like John mentioned at the beginning of the show, this show is supported by you. If you wanna support us in the most direct way, please subscribe to our Patreon as a member and give us $8 a month. This is a pretty expensive hobby.

Shay Nehmad:

We both, like, take about an hour, an hour and a half to do an episode. And that's after we've perfected it for, like, 2 years. And, we pay for editing. Hey, Filippo. Say hi to everyone.

Shay Nehmad:

You don't really have to say hi to everyone. Maybe you can put a funny sound effect here so people actually know you edit the episode. Or you can like like, I stopped my voice to sound stupid. That'll be fine. So supporting us that way, to help cover for the editing and, and, hosting fees, etcetera, is really nice.

Shay Nehmad:

If you wanna talk to us, find the links to the Patreon, maybe the swag store, you can, grab a hoodie or a shirt or the you know, like, the amazing cup. Cupago.dev.

Jonathan Hall:

The new cup with the black interior. Right?

Shay Nehmad:

Yeah. That looks good. I don't have that one.

Jonathan Hall:

It looks I don't know. Yeah. I wouldn't need to get one.

Shay Nehmad:

Yep. Looks dope. Actually, for you, shipping is gonna be really cheap as well. But it doesn't matter because when you buy off our shop, shipping is included. Woo hoo.

Shay Nehmad:

Well, woo hoo. I don't know. We decided that at the beginning because I didn't wanna mess with shipping and then some orders we lose money on it, like anyway, whatever. Whatever. Get the cups.

Shay Nehmad:

It's fine. All the links are there. We always say, like, this is how you spell us in the gopher slack and this is how you email us. All the links are capago.dev. Just find them there.

Shay Nehmad:

You're technical.

Jonathan Hall:

There you go.

Shay Nehmad:

You're fine. Gonna do fine. Other than that, please leave a review on Spotify or Apple Podcasts or wherever you listen to your podcast. That would be greatly appreciated. We don't advertise to push this show, promote it in any way.

Shay Nehmad:

It's just word-of-mouth. So any reviews you leave or if you send a link to a friend or a coworker, that would be great. That does it for us this week, and we'll see you all next week. Right?

Jonathan Hall:

Program exited. Goodbye.