Hey manucorporat! So fun seeing this on the frontpage of HN. I'm bummed our two paths didn't cross in person via a Go conference or something else. Wanted to say how happy I was to see Gin rise in popularity in the community. I think you did a great job taking some of the elegant bits from Martini and making some better technical tradeoffs that were more idiomatic for Go.
Congrats on the traction you’ve got with this project. We used Gin back in 2016 for a while. I honestly don’t understand those Go devs who claim that the standard library is sufficient for building a serious API — there’s still so much boilerplate, and you end up writing your own mini-framework anyway.
The main reason we don’t use it anymore is that the default handlers don’t return the error type, which means error handling and HTTP status tracking get tricky and non-idiomatic as soon as your handlers start calling functions that can fail. It’s essentially a function coloring problem.
One could argue that HTTP status is a totally separate thing from normal errors, and I get that perspective, but that’s a significant ergonomic hit to take for the sake of philosophical purity.
Thanks for the detailed walk-through @manucorporat .
On designing for zero breaking changes, I see that is also a core value at Go. However, how did you actually apply it to software design and architecture? Got any resources to share here? Did you had to put more effort on other projects not running on Go to keep it also free from breaking changes?
I'm mainly building tooling in other runtimes like Rust and TS, and I'm interested to hear your take on it.
> You write the same plumbing for route params, request parsing, validation, and responses in handler after handler. None of it is hard. Enough of it becomes noise.
As a human, I would have written something like:
> You write the same plumbing for route params, request parsing, validation, and responses in handler after handler. None of it is hard, but it makes the code noisy.
Whether or not an LLM wrote this, it's a writing style that sounds like a politician or a sophist, and it sucks.
Part of reaching maturity is an ability to tell when your jokes or behavior make others uncomfortable, even when you don't think they should, and moderating yourself to enable others to feel comfortable with your presence. Part of maturity is also knowing when the things that cause you discomfort are unreasonable and recommending they be avoided is disruptive and antisocial. I think "all references to alcohol" falls pretty far under that latter category. Part of getting over alcoholism in our society is gaining the ability to hear references to it without suffering emotional distress, and while it's good to help people on that journey erasing reference to their object of dependence is both unworkable and ultimately harmful to those ends.
If seeing a word written down is traumatizing, you need more help, and you’re not suited for the professional world. If coddling people like that would make you select away from a project for something beyond its technical merit, then I question your ability act as a professional.
I don't agree with the original take but this response is worse. Always choose curiosity about someone else's mindset rather than use it as an imaginary platform to build yourself up and pretend to be higher than them. Find another way to gain confidence.
Truth be told, I came up with this name when I was 12 years younger. The other big framework back then was called Martini. And Gin pretended to be the idiomatic version for Go. Go -> Gin
As someone who has been sober for 10+ years and still avoids events where alcohol is served, the word Gin doesn't cause me any stress. Just one point of anecdata.
This is important, but let's think it in different light. If society treated alcohol responsibly, without hammering the population with direct advertisement in ads, or indirectly with movies and cultural production, would a package name like this be offensive? I really doubt, so the problem isn't the package naming, but the entire cultural production that incentivises and rewards alcohol abuse.
"Gin" is also an abbreviation for "engine", as applied to various machines during the industrial revolution. Eg, cotton gin. In that sense, it's quite a good name.
LLM tells:
> Fyve faded. Gin kept going.
> the honest version of web programming: no magic, explicit control flow, and a handler shape you can hold in your head.
> keep the request path explicit, run no reflection there, and put the boring work behind one object you can inspect: the Context.
> None of it is hard. Enough of it becomes noise.
> we didn’t rename ours — we made gin.Context satisfy the standard interface, adding full compatibility
> Params land in a small slice, the matched handler is already sitting on the final node, and the request path avoids reflection.
LLMs tend to write in this style full of short sentences or phrases separated by commas.
It's actually hard to understand what the point is at times:
> The work follows the length of the URL, not the number of routes registered in the app.
> That is the kind of performance work I trust: fewer operations on the hot path, and fewer concepts in the programmer’s head.
> The quiet goal was zero breaking changes.
Adjectives such as "honest" and "quiet" are LLM tells.
thanks for the feedback! while i wrote all the story myself I let AI do a full rewrite, i have not developed the eye to do the editing yet
that's confusing, why would you [ write -> LLMify -> edit to deslopify ] rather than keep working with your own words
Why on Earth would you do that?
I released Gin in Hacker news more than 10 years ago! Changed my career and allowed me to meet a lot of interesting people. Thank you HN!
Hey manucorporat! So fun seeing this on the frontpage of HN. I'm bummed our two paths didn't cross in person via a Go conference or something else. Wanted to say how happy I was to see Gin rise in popularity in the community. I think you did a great job taking some of the elegant bits from Martini and making some better technical tradeoffs that were more idiomatic for Go.
Great to see you here :D
I liked reading about Qwik as well. Thanks for sharing.
Congrats on the traction you’ve got with this project. We used Gin back in 2016 for a while. I honestly don’t understand those Go devs who claim that the standard library is sufficient for building a serious API — there’s still so much boilerplate, and you end up writing your own mini-framework anyway.
The main reason we don’t use it anymore is that the default handlers don’t return the error type, which means error handling and HTTP status tracking get tricky and non-idiomatic as soon as your handlers start calling functions that can fail. It’s essentially a function coloring problem.
One could argue that HTTP status is a totally separate thing from normal errors, and I get that perspective, but that’s a significant ergonomic hit to take for the sake of philosophical purity.
Thanks for the detailed walk-through @manucorporat . On designing for zero breaking changes, I see that is also a core value at Go. However, how did you actually apply it to software design and architecture? Got any resources to share here? Did you had to put more effort on other projects not running on Go to keep it also free from breaking changes?
I'm mainly building tooling in other runtimes like Rust and TS, and I'm interested to hear your take on it.
Related: Rich Hickey's 'Simple Made Easy' (2011) https://youtu.be/SxdOUGdseq4
Classic talk that still influences my design decisions today.
> You write the same plumbing for route params, request parsing, validation, and responses in handler after handler. None of it is hard. Enough of it becomes noise.
As a human, I would have written something like: > You write the same plumbing for route params, request parsing, validation, and responses in handler after handler. None of it is hard, but it makes the code noisy.
Whether or not an LLM wrote this, it's a writing style that sounds like a politician or a sophist, and it sucks.
Cool! I used gin once on a company project.
I'm not sure if I could use a framework that shares the name with an alcoholic drink in a professional setting.
Plenty of people who struggle with alcohol and who would benefit of not being reminded of it at work too.
Part of reaching maturity is an ability to tell when your jokes or behavior make others uncomfortable, even when you don't think they should, and moderating yourself to enable others to feel comfortable with your presence. Part of maturity is also knowing when the things that cause you discomfort are unreasonable and recommending they be avoided is disruptive and antisocial. I think "all references to alcohol" falls pretty far under that latter category. Part of getting over alcoholism in our society is gaining the ability to hear references to it without suffering emotional distress, and while it's good to help people on that journey erasing reference to their object of dependence is both unworkable and ultimately harmful to those ends.
If seeing a word written down is traumatizing, you need more help, and you’re not suited for the professional world. If coddling people like that would make you select away from a project for something beyond its technical merit, then I question your ability act as a professional.
I don't agree with the original take but this response is worse. Always choose curiosity about someone else's mindset rather than use it as an imaginary platform to build yourself up and pretend to be higher than them. Find another way to gain confidence.
Worst response ever!
Truth be told, I came up with this name when I was 12 years younger. The other big framework back then was called Martini. And Gin pretended to be the idiomatic version for Go. Go -> Gin
Its a great name
As someone who has been sober for 10+ years and still avoids events where alcohol is served, the word Gin doesn't cause me any stress. Just one point of anecdata.
This is important, but let's think it in different light. If society treated alcohol responsibly, without hammering the population with direct advertisement in ads, or indirectly with movies and cultural production, would a package name like this be offensive? I really doubt, so the problem isn't the package naming, but the entire cultural production that incentivises and rewards alcohol abuse.
"Gin" is also an abbreviation for "engine", as applied to various machines during the industrial revolution. Eg, cotton gin. In that sense, it's quite a good name.
You do you, but it's tough out there for that position, given Homebrew, Flask, Absinthe, Wine, &c.