Tests just keep getting better, and so do the imaginary internet points!

Shay Nehmad:

This show is supported by you. Stick around till the ad break to hear more about that. This is Cup of Go for 04/23/2025. Keep up to date with the important happenings in the Go community in about fifteen minutes per week. I can tell you ahead of time, this time is gonna take more.

Shay Nehmad:

We have too many items on the backlog. I'm Shay Nehmad.

Jonathan Hall:

And I'm Jonathan Hall.

Shay Nehmad:

We took last week off. I had some things to take care of, and our backlog is very, very, very full.

Jonathan Hall:

Yeah.

Shay Nehmad:

Right now I'm in a security startup, and this week is always like the most stressful week because it's one week before RSA in San Francisco, which is like the big industry conference. So my LinkedIn has been absolutely like, everybody's raising capital, like millions of dollars, tens of millions of dollars. And my even my previous company, Record, raises like 25,000,000 this week. So I'm all like overwhelmed by everything that's going on. Let's talk about like some technical topics about a boring programming language that advances very linearly and is dependable, just to balance out all the Yes.

Shay Nehmad:

Oh my god, there is such and such. And the tariffs, and oh my god, and like, I need some other type of news. Can you help me with that?

Jonathan Hall:

So I wanna I wanna do a shout out to the GO team for having a a slow week with proposals. There was virtually nothing happening this week. They they had their meeting

Shay Nehmad:

Thank you,

Jonathan Hall:

GO few discussion points, nothing we're gonna talk about this week. So that gives us a chance to catch up a little bit. Thanks for making our lives easier.

Shay Nehmad:

I know

Jonathan Hall:

that's why you did it.

Shay Nehmad:

They were like, oh no, no, Cup of Go episode. We should we should stop because

Jonathan Hall:

I know that's how it works, right?

Shay Nehmad:

I mean, we're we're we're

Jonathan Hall:

that important, right? Aren't we? So, the first thing before we talk about proposals, which we have several to talk about, the first thing I want to talk about is Find Conf twenty twenty five, tapping again in Edinburgh, Scotland on 09/19/2025, and the CFP is open until June 20. So if you want to speak there, you have a chance to submit a CFP.

Shay Nehmad:

Yeah. Cool stuff if you're into the GUI apps in Go kinda kinda thing. They're gonna talk about new features in FINE since last year. They had a big like performance refactor as well, which I assume is gonna be highlighted. Just some project examples, tips and tricks.

Shay Nehmad:

So even if you don't, like, if you're not a fine professional, but you just wanna, like, learn, I think it's gonna be a cool way to to learn it. June 20 at six. Oh, that's when the CFP closes. Sorry. September 19 is when the conference is happening.

Jonathan Hall:

Yep. Definitely.

Shay Nehmad:

And of course, fine is a thing by the friend of the show, Andy. Hey, Andy, what's up? Now let's talk about tests. Tests are are important, right? I think one of the things people learn when they get into Go more more quickly than other languages is how to like write tests and run the Go test command.

Shay Nehmad:

Right? Because it's like a, air quotes, professional language. And by that I mean, it's geared toward like enterprise productivity and like developers who are already on their second language normally. Setting up tests is pretty easy. You don't have to install anything, etcetera etcetera.

Shay Nehmad:

But there are always things to improve. This week we have like three things that have been improved. First one is pretty simple. It's adding t. Output and being able to log stuff into t.

Shay Nehmad:

Output. So there's a function in t. T is the interface testing. Tb, which is the thing you pass into every test function. So you inject all the testing context into the every test function, right?

Shay Nehmad:

That's very normal. Whether it's a testing, whether it's a test or a benchmark, which is why it's called TB, which took me a long time to figure out while I thought was tuberculosis. Yeah, was I was watching House at the time.

Jonathan Hall:

It's never as simple as tuberculosis on House though.

Shay Nehmad:

It's what's their thing? It's never lupus. ANA was negative. It's not lupus. So there's a new function.

Shay Nehmad:

It's called output. So you do t dot output. And it gives you a writer that writes to the same test output stream as as if you did t dot log. T dot log has a few cool benefits, which maybe you don't even realize to start with. But there's a good reason we don't do fmt dot print in test, but we do t dot log instead.

Shay Nehmad:

Do do you know any like some of the some of the reasons?

Jonathan Hall:

Well, yeah. Fmt Print just always prints out nonsense, so you you get just garbage on your console. Whereas t. Log will, by default, only output if the test fails.

Shay Nehmad:

Which is super useful for cleaning. Like, you open your CI output and you only see the logs that are relevant for the tests that failed, not all of them. I'm actually writing end to end tests with NestJS right now, and I've been itching to implement something similar, which is like only turn on the logger if the test failed. But it's gonna take so much effort where in Go you just like get the t dot log for that. But this is for prints in the test.

Shay Nehmad:

There's by the way another reason, which was pointed out in this discussion that I didn't think of, but it's actually relevant. What happens if you run multiple tests in parallel? So the output, if you use FMT, you have no idea which line comes from which test, and then you end up doing like, alright, I'll add the test name to every print, and then you're basically on your path to reimplementing it anyway. And one small benefit, but for me that I really really like, is that it's indented. And it's indented, like if you have test cases within tests, it's indented correctly.

Shay Nehmad:

Which is another nice side benefit, which is useful for like useful for, you know, you open the CI output and you'd like, you wanna see what happens quickly. So that's nice. This all already exists, everything we talked about. This proposal is about adding a t dot output, which gives you access to the underlying writer. Why is that useful?

Shay Nehmad:

Because you can pass it to s log as the output, then having logs only printed in failed tests and in their, like, quote unquote right place.

Jonathan Hall:

Or not just s log, but any other arbitrary thing that that might output useful debugging data. Right?

Shay Nehmad:

Yeah. Yeah. The the original proposal is because of s log t. Mhmm. The interesting part is because you do it like this and it's solved from Go side and all the third party library, it solves all the, you know, finding the caller and the right tests and all of that.

Shay Nehmad:

Just because it happens within the testing package, so you don't have to break any boundaries. A lot of comments here from Daniel Neffin, which we had on the show. But not surprising that we mentioned him on a testing themed episode. And yeah, it was accepted. Actually, I'm ashamed to admit it was accepted March 12, and it's been sitting in our backlog since then.

Shay Nehmad:

But we've been waiting for, like, the correct opportunity to to mention it. And there's already a change list. Like, there's already a I don't It's not called a pull request in in Gerrit. Right?

Jonathan Hall:

On the change list. CL, right? What you got is a change list, isn't it?

Shay Nehmad:

Could be a change something. But there's a lot there's a ton of comments here. Unlike most Yeah.

Jonathan Hall:

Change list is right.

Shay Nehmad:

Change list is right. Mhmm. Changelists makes more sense than pull request. I never understood pull request, by the way. And I'm I'm deep into git.

Shay Nehmad:

I read, like, the source code.

Jonathan Hall:

I'm pretty sure pull request is a GitHub thing, not a

Shay Nehmad:

GitHub Yeah. Yeah. I mean, GitHub. Anyway, that's a different discussion. One thing that's very interesting is that there are a ton of discussion on the changelog itself.

Shay Nehmad:

Like, this is not an obvious port request at all. You know, they're already at the twenty first patch set, and there's a ton of comments. So if you're into that sort of stuff, like actually reading code and seeing how it's implemented inside the Go library, which is pretty fun, like I It's a good way to learn the language, I think. Getting your hands on this PR would be cool. Right now there aren't like The code review is unsatisfied.

Shay Nehmad:

So, you know, feel free to like sign in and share your comments. Because there already have been 45, resolved comments. I think this is a good case study. So that's one thing about testing. But you have, more improvements.

Jonathan Hall:

Yeah. So that's not all. Wait, there's more.

Shay Nehmad:

Yeah. That sounds a bit does this ever happen to you?

Jonathan Hall:

So have you ever written a test where you write a file in the test or maybe you do some directory manipulation or something like that? And then sometimes you wanna examine that later, like maybe the test fails for random reasons, don't know why, and you want to look at that output. If that describes you, for only $10.99 plus shipping and handling so the the new proposal is to store test artifacts. So the idea is to give us kind of like the last one where they gave us just a general rather than solving the very specific problem of I want my S log output to go somewhere. So the proposal is to add a new function to once again TB and F this time called artifactdir, which returns a string that is the name of a directory.

Jonathan Hall:

So you can store your artifacts in that directory then rather than using OS. Tempter or something like that. And then those artifacts will become available to you after the test run. If you add the new command line flag dash artifacts when you run your tests. In addition to storing those in a random directory, it adds new output to your test case.

Jonathan Hall:

It adds an artifacts header and the name of the test and the path that those artifacts are stored in per test. So you can go look up those artifacts. So you wouldn't typically run, you know, go test dash artifacts in your CI pipeline, for example. You do that when doing local testing when you wanted to sort those artifacts at a place where you can look at them for debugging purposes.

Shay Nehmad:

So what you're saying is I have a test and, you know, it might produce some files and then we compare it to a snapshot. So these are the test artifacts and you wanna store them only when it fails, basically?

Jonathan Hall:

Yeah.

Shay Nehmad:

Cool. Cool. Cool. This seems like something I would implement if I needed it.

Jonathan Hall:

Mhmm. I I had implemented it before. Yeah.

Shay Nehmad:

Is it a lot of, like, heavy lifting? Seems like a this this has been accepted. Right?

Jonathan Hall:

Yes.

Shay Nehmad:

So this might be late joining the discussion, but it seems pretty, like, simple. Right?

Jonathan Hall:

I don't think it's that conceptually difficult. I don't see a CL yet, so it's still waiting. It's not even targeted for a specific version of Go. So if you wanna go implement this, I think you have the opportunity to. But I don't think it's actually as hard.

Jonathan Hall:

Like I said, I have implemented the same sort of thing a couple of times. Of course, I wasn't trying to target the general public. I was trying to target my very specific case. So I'm sure I didn't consider all the edge cases.

Shay Nehmad:

But but there are like I don't know. There are just equivalent, you know, packages like Ghostnaps that give you, like, match snapshot, which save like a snapshot This is not necessarily for snapshot testing. Right?

Jonathan Hall:

Not specifically. It's more general than that. Yeah. Maybe you're building a new YAML parser because the old ones were deprecated, for example, and you wanna write some YAML to a directory somewhere. And then during the testing, it's not working for some reason.

Jonathan Hall:

So you wanna write that to a directory that you can later examine.

Shay Nehmad:

Or maybe the reason this is becoming prominent is because all these LLM apps are so unpredictable. They're like inherently indeterministic, right, because they have probability built into them. Then you want to, like, you run your benchmark, but you wanna store the artifact to the side of like, the actual prompts that return. So you can visually inspect the the benchmark without logging every single prompt into the We had something similar at Orca. Yeah.

Shay Nehmad:

We had a benchmark of whether the LLM output is okay, but we also stored like temporary artifacts. But we used like GitHub artifacts for that, and that cost a lot of money. Cool. I'm wondering like who's gonna actually use it. What I'm assuming that's gonna end up happening is people are gonna write wrappers that underlying like use this thing in their for every single project.

Shay Nehmad:

But it's not gonna become like something that everybody uses. Unlike the previous proposal of t output, which basically I would, in every test I would try to shove my logger into t dot output. Mhmm. Right? This seems like a very specific use case thing.

Jonathan Hall:

Yeah. I agree. Yeah.

Shay Nehmad:

Cool. Cool. Cool. And it's been accepted and you said, change list. You don't have a change list?

Jonathan Hall:

I don't see a change list yet, so it's still waiting for an implementation.

Shay Nehmad:

Alright. Interesting. That

Jonathan Hall:

could be you. For just

Shay Nehmad:

$10.99. And if you implement it in a week, we'll also throw in a set of steak knives. Talking about predictability, there's another blog post we wanted to talk about that's related to testing.

Jonathan Hall:

Yes. Yes. There is. So we're a little bit behind on this one. Also, this came out April 2.

Shay Nehmad:

No, again, this is fine.

Jonathan Hall:

Not too bad, yeah. But this is from the Go team. So one of the official Go blogs. I think they threw out like three of them at us in the last couple of weeks and we haven't even gotten to most of them. But this one, more predictable benchmarking with testing.

Jonathan Hall:

V. Loop. Have you written many benchmarks in Go, Shay?

Shay Nehmad:

I've not written many, but I've really enjoyed the ones that I have. Mhmm. I've written one for, like, a JavaScript, like v eight engine running within Go Mhmm. Where we try to run JSONata stuff. And the benchmark discovered I did benchmarking and fuzzing.

Shay Nehmad:

It was like the first time both of these features have been relevant to the same endpoint.

Jonathan Hall:

Mhmm.

Shay Nehmad:

And bro, that was so cool. I felt so smart. Even though it's like so easy. You just replace testing t with testing b and like add a for loop and it's just like you're done. I felt so smart.

Shay Nehmad:

I felt like the most elite programmer on the face of the earth. So not a lot, but when I did, I I had a lot of fun.

Jonathan Hall:

Did you run into any pitfalls building your your benchmark?

Shay Nehmad:

Not me. But I've

Jonathan Hall:

because you're superhuman.

Shay Nehmad:

No. I just I'm like, I ran it and then it was like, this is the number. And I was like, fine. And then they commented it out because the number was fine.

Jonathan Hall:

Alright. Well, some people run into problems and I have too. Basically, it's easy to do your benchmark loop wrong. Right? So especially if you have something, and I imagine this might have applied to your situation where you have to do some setup that you don't want to be included in the benchmark.

Jonathan Hall:

Right? So you want to create your V eight engine instance, for example,

Shay Nehmad:

I'm imagining Oh, for sure. Like you set up everything and then the

Jonathan Hall:

only GPU And then you wanna execute that code 10,000 times or whatever, not the setup 10,000 times. Yes. So you have to be careful about ordering things and and start and stop and all that stuff if you're doing benchmarks, if you want them to be valid. Well, Go 1.24 added a new loop method to the testing. B type that makes a lot of that a little bit easier for you.

Jonathan Hall:

So rather than doing your own for range over number of things and making sure you call start and stop in the right place, you could just call d. Loop and put your loop function inside of that. And it makes sure that the start and stop are handled before you go in some of those things. And this blog post is all about, by the new capability, it's a short blog post. If you ever do or want to do benchmarking and go, I highly recommend reading this because it will make your benchmarking life easier.

Shay Nehmad:

The interesting like, the the small thing is that you don't have to remember the reset timer trick anymore. Which is after you used to, after you do your setup, have to call reset timer. But it seems like it solves even more subtle problems with like, you know, the compiler looks at stuff and the stuff looks like dead code and then it

Jonathan Hall:

Oh, right.

Shay Nehmad:

It, blah blah blah.

Jonathan Hall:

Yeah. It

Shay Nehmad:

benchmarks nothing, basically, which is not what you want. Right. And using the loop function, when you use it, it prevents dead code elimination and not allowing inlining and calling the re the like start and stop timer thing. Not start, reset and start, just doing it inside the loop. So it's not introducing any new feature, it's just because you could have done all this stuff with like compiler directives and and calling it manually and whatever.

Shay Nehmad:

Just makes it super simple to write benchmarks. And and less obvious in a more obvious way.

Jonathan Hall:

Mhmm. Yep. I like it.

Shay Nehmad:

This is now the preferred way to write benchmarks. Right?

Jonathan Hall:

Yes. This is the preferred way to write benchmarks now.

Shay Nehmad:

So do you think the modernized Linter should support it now as well? Is that is that a thing someone needs to remember to do?

Jonathan Hall:

So the modernizer one of our call is actually writing simple rewrite rules. I don't think that would apply here.

Shay Nehmad:

Why? You look at all the places where you do for rangeb.in and you replace it with b dot loop? Super simple.

Jonathan Hall:

Is it is it literally that simple? It might be.

Shay Nehmad:

Well, some some linter rules should warn people about it somehow.

Jonathan Hall:

You should be able to detect that you have a benchmark that's not using b dot loop. That would be easy. But automatically rewriting it might not be as easy, at least in all cases.

Shay Nehmad:

Well, there might be a linter already, and I'm, like, just thinking about a great idea that someone, like, already implemented. Wouldn't be the first time.

Jonathan Hall:

Let's talk about popularity.

Shay Nehmad:

Alright. How popular were you in high school? And how is that

Jonathan Hall:

I was the most popular of the two nerds in high school.

Shay Nehmad:

Yeah. That's why I'm so good that's why I'm so good in programming, just because I was so popular. No, we're talking about popularity of programming languages, of course. The TIOBE index has They publish every now and then, so it's not like a huge news. I just found it interesting with the current macroeconomic conditions like in the world, and this is not an economics podcast, but I'll try to use, like, vaguely technical terms, and I would say it's bad.

Shay Nehmad:

Right? Like, if I had to just really dig deep and use the technical terms from the financial analyst market, it's like not great. It impacts this index as well. The TIOB index is like, which language is most popular? Like, and they try to add some context over why this is happening.

Shay Nehmad:

The ratings show that the most popular language is Python, unsurprisingly.

Jonathan Hall:

By a big margin too.

Shay Nehmad:

Yeah. Yeah. And it's increased a ton, like by 6%. So now it's 23% popular. This is kind of vague.

Shay Nehmad:

Right? Like, definition, you can read through it. Doesn't mean that any 23% of code in the world is in Python.

Jonathan Hall:

What's the TLDR though? Is is this like trying to measure developer sentiment about the language or

Shay Nehmad:

So it actually it it doesn't care about sentiment at all. Things can be really high if people don't like them. It's just looking at search engines

Jonathan Hall:

like

Shay Nehmad:

Google and seeing how many people are looking for a thing. Which is, by the way, interesting because I would think that so much of programming language searches have are not from like web searches at all, they're from LLMs. I don't search for things in like, that are JavaScript related right now because I'm writing in JavaScript, I just use Copilot. Now it does some web searches every now and then. Mhmm.

Shay Nehmad:

Not well enough to actually generate fucking useful code, but it does web searches every now and then. But mostly it doesn't. And this doesn't include that. So, you know, take it with a grain of salt. But high level, Python is really high up, followed by C plus plus C, Java C,

Jonathan Hall:

and then

Shay Nehmad:

Go at number seven. And all of these have been pretty solid in their places, like they haven't really changed. C and C plus plus Switch, but, like, who cares?

Jonathan Hall:

They're the same language anyway, aren't they? Just like Java and JavaScript.

Shay Nehmad:

I would say I would say that Java being, like, 10% and JavaScript being 3.7% seems just that number seems fishy. Yeah. The interesting part is that according to what they're saying, common languages are becoming more common. So, like, there's a very strong consolidation in the market right now. So there isn't a lot of room for, for example, languages like Ruby, because overall what they claim is that the top 20 languages cover 83% of the market, which was, again, this is search engine evaluation.

Shay Nehmad:

But it used to be 75%. So the more common languages are becoming more common. So the market is like defensive and preferring like more proven technology to new technologies. But this is kinda, again, this is kinda weird, because I see Visual Basic at number eight, and you know, like Scratch at number 12 makes sense to me because students use it, but nobody makes money out of Scratch. Right?

Jonathan Hall:

And that's right below Fortran.

Shay Nehmad:

Yeah. So I think this is very heavily influenced by people like students and things like that. I would assume that C is high up because a lot of universities teach it as well, and not just like because a lot of people write actual code in it. But it's also relevant, right? What people search, like their intro to programming and things like that.

Jonathan Hall:

I'm just surprised that JavaScript isn't so much higher.

Shay Nehmad:

Yeah. Actually, maybe because it's JavaScript and, like, JS and TypeScript, and they don't, like, calculate it correctly. Yeah. And there are some weird things here. You know, Bash is considered a programming language, and TypeScript is a separate thing from JavaScript.

Shay Nehmad:

Although, in reality, it's not like it's the same language with typing hints. So it's again, this index is not very

Jonathan Hall:

Logo is above PowerShell. That that's weird.

Shay Nehmad:

We have we have a lot of questions about this index. The interesting part is that Go was popular, stayed popular, is still number seven, like, at a solid, like, you know, person's second language, and that there's a lot of consolidation. And I think I don't know. You tell me. But on the one hand, Go is like new ish and modern ish.

Shay Nehmad:

Mhmm. But when I look at the technology landscape right now, to me, Go falls straight, like, definitely in the camp of, oh, there's not a lot of money in the market, go with Go. Right? And not with, like, some new language or some new tech.

Jonathan Hall:

Go is definitely the newest of the top 10 languages by by a long shot.

Shay Nehmad:

What I'm saying is the if if there's gonna be even more consolidation, and, like, no company's gonna be like, I'm gonna work in a new programming language. I'm not gonna allow it. I just wanna use, like, proven tech. Is Go already in the in the camp of proven tech because it has enough, like, I I guess the word I'm looking for is pedigree.

Jonathan Hall:

I think so. I mean, but but I have a biased opinion on that, so As as the host of a Go podcast. Yeah.

Shay Nehmad:

Actually, as a as a podcast host, you would be we would benefit from being like, oh, this is super exciting. I don't know if this language is gonna live or whatever. Like, if it wasn't so quote unquote boring. You know what mean? Yeah.

Shay Nehmad:

Anyway, this index seems to think that Go falls in the it's old and and it's like mature enough to be considered consolidatable, and it also has raises a lot of questions about the nature of its data as well. Take it with a grain of salt.

Jonathan Hall:

I'd I'd I'd say kudos to Go for winning a bunch of imaginary Internet points.

Shay Nehmad:

Yeah. That's really important.

Jonathan Hall:

Welcome to our break. Thanks for sticking around this long, listening to the news. Quick updates on a couple things. Shay is doing the San Francisco meetup Woo hoo. With six people.

Jonathan Hall:

And maybe you. You could be number seven. Tell us the details on that, Shay.

Shay Nehmad:

May twenty eighth twenty twenty five at 5PM, we're gonna do one live podcast recording with this new mic that I'm using right now. Mhmm. So I hope that's gonna work out fine. And there are already six attendees. We're looking for two things.

Shay Nehmad:

We're looking for three things. One, if you work in the San Francisco Bay Area, and your company has a nice office in San Francisco, please let us sit there for a while. Worst case, I'll, like, grab a WeWork room, but that's gonna be kinda lame. And there's a talk to be determined. If you wanna do a talk at the meetup, you have like a topic you wanna share, or even like practice your presentation before showing it to like a real meetup, that would be cool.

Shay Nehmad:

And we're just gonna meet up, do some schmoozing, do the podcast recording, do another talk, and maybe, like, go out to drinks after. Five to seven Pacific Daylight Time, May twenty eighth. Awesome. So about a month from now.

Jonathan Hall:

Also in Meetspace, I have agreed to speak at the next Atlanta Go meetup, which I think will be May 7, waiting for official confirmation. We'll mention on the show when it happens. If you wanna meet me, possibly again, if you already have, that would be the opportunity to do that. If you don't like Meetspace, you can also participate with the show by going to cupugo.dev, where you can find swag, which we can send to you in Meetspace. You can join our Patreon.

Jonathan Hall:

We have one new member this week. Big shout out to Liz Lam. Thanks for supporting the show. And you can also leave a rating or review on Spotify or iTunes or Apple Music or whatever it's called these days or wherever you happen to listen to this podcast. It's a big help.

Jonathan Hall:

And of course share the episode with a friend, a colleague, a student, anybody else who might be interested in learning about Go. And we'd appreciate it. You can also join us on Gopher Slack. If you're on the Gopher Slack, our channel is Cup of Go, that's Cupcase. Join us there.

Jonathan Hall:

We have over 500 people and some pretty lively discussions sometimes about topics related to Go. So join us there. Did I miss anything, Shayne?

Shay Nehmad:

There's there's one thing I wanna add. Our Patreon has been going on for a while, and some people have been a member of it for for a pretty long time. So I wanna shout out Jens, Frederic, Andy, Jamie, Matthias, Joost, or I assume it's Joost, Josh, who's gonna be at the meetup, Leonid, Robert Burke, Will, Will Roden, Adelina Simeon, Kyle Skews, Doug, there are a lot of people here who have been around for a while. We really really appreciate it. Thanks a lot.

Shay Nehmad:

I almost like sort of wanna say, how about you downgrade to free for a while? But it actually does help support the show. We don't make money out of this. We're just like paying for, you know, maintenance and our time, and we're pretty much still covering it. So we really really appreciate the people who have been around here for a while.

Shay Nehmad:

So there are ways to support the podcast directly, if you like the Yes. Other than doing the podcast, which we don't do full time, we do like an hour an hour a week and maybe an hour of research a week, which we do separately. And if we have an interview, then that's like another extra hour. We have other like jobs and companies and things that we do, and we would like your help with that as well. So how about you start?

Jonathan Hall:

Sure. So I have a contract ending the end of this month. So that means that starting next month, I'll be free to find a new contract. If you could use a fractional gopher on your team, someone to help with architectural go related work, hit me up. I'd love to Fractional gopher.

Jonathan Hall:

Fractional gopher. Isn't that a good title? I don't know what that says to people, but I think it feels fun.

Shay Nehmad:

None of these words are in the bible. So yeah, go hire try to hire Jonathan. I would think if you need a fractional gopher or a professional LinkedIn troll, he's pretty good at both. At Opsin, the startup where I work, if you're in the San Francisco Bay area, we're looking for engineers to join us. It's not Go, unfortunately.

Shay Nehmad:

So I don't know how much this show is a good fit for hiring these people. But hey, if enough of us join, maybe we'll be able to rewrite the whole thing.

Jonathan Hall:

Although Once Go reaches 25% of imaginary Internet points, maybe it'll be

Shay Nehmad:

Yeah. Possible. Yeah. So if you wanna join up, then you can reach out and Or if you know someone who's a good fit.

Jonathan Hall:

I think we'll steal a lightning round and then call this a show. What do you say?

Shay Nehmad:

Let's go. Lightning round. Alright. First thing on the lightning round, it's for me. Do you know truffle hog?

Jonathan Hall:

I know what truffles are and I know what hogs are. I know they're related.

Shay Nehmad:

So there's a project called truffle hog, which you should probably like in every project, there are a few things you always wanna set up. Right? Like go langs the island, we talked about in the in recent episode. That's an always go to. At some point, some of your projects have to like be SOC two certified, or you know, you have to have some stuff on them.

Shay Nehmad:

At that point, reaching for Tronfolog makes sense. It's a secret detector. It like finds creds in your code. But unlike most secret detectors which end there and have a whole, like a ton of, you know, credentials, but maybe it's just test credentials or whatever, it also verifies them, which is really cool. They have a new release from two days ago.

Shay Nehmad:

It's like a % written in Go. And, you know, the new release is like quote unquote a small release. But, you know, these these are the sort of projects which have just a lot of things going on. So for example, they fixed the ocean the Digital Ocean detector. So if you have if you use Digital Ocean and you're worried about leaking the Digital Ocean credentials, they implemented this in the latest release.

Shay Nehmad:

This is just like one example, and they also do like proper security releases. So pretty cool. They have they just have a really deep list of detectors, and I've used it. It runs super fast and has a lot of integrations, like in CI, you can run it Recomate, you can do blah blah blah. Very good stuff.

Shay Nehmad:

So if you don't use it yet, I recommend it. It looks pretty good. I'm I'm, like, considering setting setting it up, like, today, just because it seems pretty easy.

Jonathan Hall:

My lightning round item is an update from a past item in a past interview. We had Joe Tsai on the show, gosh, a year, year and half ago talking about JSON v two. It's been officially accepted to include JSON v2 in Go 1.25 as an experiment. So you can still use the existing GitHub repo if you want to play with it in Go 1.24 or even older versions of Go. But starting with Go 1.25, if you enable Go Experiment equals JSON v2, you will have the new official JSON v2 package from the standard library available to you run your CI and experiment with, which probably means that in Go 1.26, it will be a full on official package available for everybody without the experiment.

Jonathan Hall:

Of course, that depends on the results of the experiment, but as long as this has been coming, I don't imagine there will be any major surprises, that would prevent it from making it to Go 1.26. So I'm excited.

Shay Nehmad:

Cool. Cool. Cool. New version of JSON. Why don't why don't they just use YAML?

Shay Nehmad:

No. I'm kidding.

Jonathan Hall:

Now there is an idea. I'm sure they hadn't seriously considered it.

Shay Nehmad:

Last thing on the lighting round. This and, like, we talked about this. I'm not sure if this is proper news for the show, but I'm gonna share it anyway. There is a new Slack CLI, which is not for using Slack, it's for creating Slack applications from the command line. And it's written in Go.

Shay Nehmad:

So it's new, and it's written in Go, where I think the previous ones were just like JavaScript or whatever. Mhmm. So it's Go news in the sense that someone did something using Go. Mhmm. But it unless you're like super into integrating with Slack or something like that, and you wanna write the library that wraps this CLI, this will not affect your like day to day Go programming.

Shay Nehmad:

However, new package looks good, like the CLI looks good. I played around with it a little bit. So if you were hesitant about, oh, should I like create this new Slack app for my company, this automation that reports x to y? This makes it slightly easier. So you can check out the new Slack dash CLI, Slack to create this new, like, Slack applications, which could like ask questions, do mentions and messages, things like that.

Shay Nehmad:

Yeah. It is just written in Go, so I thought it was worth mentioning.

Jonathan Hall:

It's perfect for Lightning Round.

Shay Nehmad:

Exactly. And the documentation looks pretty good as well, which is super important for this sort of thing.

Jonathan Hall:

Pretty cool. I think that's it.

Shay Nehmad:

Thanks a lot everyone for listening. We appreciate you all being here. Stay safe out there, have a good one, and we'll see you next week. Goodbye. Program exit up.

Shay Nehmad:

Goodbye.

Creators and Guests

Jonathan Hall
Host
Jonathan Hall
Freelance Gopher, Continuous Delivery consultant, and host of the Boldly Go YouTube channel.
Shay Nehmad
Host
Shay Nehmad
Engineering Enablement Architect @ Orca
Tests just keep getting better, and so do the imaginary internet points!
Broadcast by