Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

> For a language team, Go is a dream.

I agree very strongly. There's no debate about things that have 1000000 permutations in other languages. e.g. The correct format can always be checked by `go fmt` with no real config options. the end.



I mean this isn't true, formatting is the most trivial part. And so many languages have an opinionated formatter these days (e.g. Black)


>> ...there is no debate...

> ...And so many languages have an opinionated formatter these days

The crux of gp's post is for Go, there is no debate as 'go fmt' is the only one that matters. Black is great, but some people prefer Ruff, leading to ...debates about which formatter the team/org should use. Go's batteries-included philosophy makes those discussions moot on so many levels beyond formatting.


As if projects haven't used to have a coding style. What's so hard in saying that code should be formatted with Black, yapf, ruff etc, beats me.


It's not hard, but when you go from project A to B you'll have to check which formatter is used; this is additional setup / overhead, plus context switch. With Go, there is no additional setup / overhead / context switching, all Go code is formatted the same way with the same tools.

This is important when dealing with large code bases and many projects, it lowers the barrier to entry by a lot. A common anecdote from Go developers is how easy it is to drop into a random codebase and just be able to read/comprehend it and work in it right away, and the ecosystem-global code style is an important aspect of that.


Literally within this thread someone has already suggested using ruff instead of Black and nobody here are colleagues.


It's a silly argument and the lowest form of bike-shedding on the level of tabs vs commas. People with no other substantive contributions use formatting as a beard.

The first one to choose it (whatever it happens to be) wins and that's the end of it. If it isn't the end of it you've got a talent issue.


> It's a silly argument and the lowest form of bike-shedding on the level of tabs vs commas

Guess what other low-level bike-shedding argument 'go fmt' obviates? That's right - tabs vs spaces!

> If it isn't the end of it you've got a talent issue.

I know you meant this as a slur, but the implication is Go works better than other languages for those who have what you call "a talent issue"


> Go works better than other languages for those who have what you call "a talent issue"

This is actually true and by design; a bit more nuanced from [0]: "Programmers working at Google are early in their careers and are most familiar with procedural languages, particularly from the C family. The need to get programmers productive quickly in a new language means that the language cannot be too radical."

Talent is important, but doesn't scale. You can have the best of the best software developers but it's a moot point how talented they are at industrial scales (hundreds of applications, tens of millions of LOC, thousands of developers, tens of thousands of features, decades of work, etc)

Note that "early in their careers" from the perspective of the author is basically <20 years of experience.

[0] https://go.dev/talks/2012/splash.article


Do you feel that this could equally apply to a Rust vs Go argument?


I do. Bike sheds do need to be painted after all, but its many less people who have the technical experience to know how many feet away from the property line it must be.


I had to think about that analogy for a moment. It's great. I wonder if that's how people feel when I use them and get a puzzled look.


Bad example. Ruff's formatter has the same style as Black. It's documented as a "drop-in replacement". The difference is mostly performance.

In any case, that's a single decision the project lead takes once.


And I'm thankful that they do, but also, Go was one of the first languages that really pushed for a standard code format - I'm actually surprised this wasn't a thing before. Or I suppose there was, like Checkstyle for Java or ESLint for JS, but they were not strongly opinionated or pushed by the core team.


what is "Black"? (For hopefully obvious reasons, I couldn't find results with google, lol)



But you're probably better off with Ruff these days: https://docs.astral.sh/ruff/

Similar to black but faster, written in Rust, by the same team who created uv.


So... A: not trivial. And B: not part of the language.

> mean this isn't true, formatting is the most trivial part. And so many languages have an opinionated formatter these days (e.g. Black)

I don't think this is correct


    B: not part of the language.
1) Some would call this a perk.

2) When your tooling around a language works better when it's not actually written in the language... That should tell you something. And yet...


This back-and-forth is a good example of why Go benefits from having a centralized linter. And uv isn't the official Python package manager even though it should be.


I don't get why this is a big issue. This isn't some recurrent decision to be made. It's something a lead decides once and the project follows. That's it. Many companies have style guides anyway (eg Google[1]); the choice of a formatter is much simpler.

[1] https://google.github.io/styleguide/go/


Because at some point you have to interact with some other team or project that made a different decision. And whatever you picked might fall out of favor and lose support. There's already a graveyard of Python type linters, including Google's pytype.

Especially the uv thing. You clone some non-uv git repo that has no pyproject.toml and you don't know what to install. Maybe has requirements.txt but it's partially wrong.


What did you search?

If I do the simplest possible thing that isn't a single word, by highlighting "opinionated formatter these days (e.g. Black)" and clicking search, I get the right result. I also get the right result for black formatter, and I get the right result if I yolo the entire comment as my search.


Ah, it's Python. Python is gross. That explains why I couldn't find it. /shrug




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: