News for hackers. Stuff that matters.
Re:Go: What We Got Right, What We Got Wrong by zimpenfish on Thursday January 04, 2024 @06:15PM (#38873628)
> Java has a culture of over-engineering [which] Go successfully jettisoned

[looks at the code bases of several recent jobs] [shakes head in violent disagreement]

If I'm having to open 6-8 different files just to follow what a HTTP handler does because it calls into an interface which calls into an interface which calls into an interface (and there's no possibility that any of these will ever have a different implementation) ... I think we're firmly into over-engineering territory.

(Anecdata, obviously)

Re:Go: What We Got Right, What We Got Wrong by evantbyrne on Thursday January 04, 2024 @08:10PM (#38874477)
Java is a beautiful and capable language. I have written ORMs in both Java and Go, and the former was much easier to implement. Java has a culture problem though where developers seem to somehow enjoy discovering new ways to complicate their codebases. Beans are injected into codebases in waves like artillery at the Somme. Errors become inscrutable requiring breakpoints in an IDE to determine origin. What you describe with debugging a HTTP handler in your Go project is the norm in every commercial Java project I have ever contributed to. It's a real shame that you are seeing these same kinds of issues in Go codebases.
Re:Go: What We Got Right, What We Got Wrong by bb88 on Thursday January 04, 2024 @06:41PM (#38873787)
But don't those exist primarily for unit testing? That was my understanding of why interfaces were there.

If you wanted a mock, you needed an interface, even if there would ever only be one implementation of it in production.

Re:Go: What We Got Right, What We Got Wrong by tormeh on Thursday January 04, 2024 @10:09PM (#38875268)
I hate this pattern. Needless indirection for insignificant benefit.
Re:Go: What We Got Right, What We Got Wrong by akoboldfrying on Friday January 05, 2024 @12:01AM (#38875877)
It's indeed horrible when debugging. OTOH, there's merit to the idea that better testing means less overall time spent (on either testing or debugging), so design choices that make testing easier provide a gain -- provided that good tests are actually implemented.
Re:Go: What We Got Right, What We Got Wrong by bb88 on Thursday January 04, 2024 @11:46PM (#38875780)
Golang "punishes" you for wanting to write a unit test around code.

You need to refactor it to use an interface just to unit test it.

Re:Go: What We Got Right, What We Got Wrong by sidlls on Friday January 05, 2024 @01:00AM (#38876187)
No, you don’t, unless you’re of the opinion that actual data structures with test data should not be used in a unit test.
Re:Go: What We Got Right, What We Got Wrong by bb88 on Friday January 05, 2024 @01:59PM (#38883129)
I think you're missing the point here.

Duck typing with python (e.g.) makes it easy to mock a class. One can subclass a Java class to make a mock, etc.

One can't do that in golang unless it's through an interface which then decouples tightly coupled code because [golang reasons].

Re:Go: What We Got Right, What We Got Wrong by zimpenfish on Friday January 05, 2024 @03:55AM (#38877087)
> But don't those exist primarily for unit testing?

I believe that's why people insert them everywhere, yes, but in the codebases I'm talking about, many (I'd say the majority, to be honest) of the interfaces aren't used for testing because they've just been cargo-culted rather than actually considered.

(Obviously this is with hindsight - they may well have been considered at the time but the end result doesn't reflect that.)

Re:Go: What We Got Right, What We Got Wrong by grumpyprole on Thursday January 04, 2024 @06:19PM (#38873648)
I stand corrected!
Re:Go: What We Got Right, What We Got Wrong by dharmab on Thursday January 04, 2024 @07:10PM (#38874007)
Why would those require 6 separate files?
Re:Go: What We Got Right, What We Got Wrong by theshrike79 on Friday January 05, 2024 @02:53AM (#38876767)
Interface, actual implementation, Factory, FactoryImpl, you get the idea.

Java lends itself to over-engineering more than most languages. Especially since it seems that every project has that one committer who must be getting paid per line and creates the most complex structures for stuff that should've been a single static function.

Re:Go: What We Got Right, What We Got Wrong by zimpenfish on Friday January 05, 2024 @04:04AM (#38877121)
They don't; you could put it all in one file but people tend to separate interfaces from implementation from types from ...
Re:Go: What We Got Right, What We Got Wrong by davedx on Friday January 05, 2024 @06:31AM (#38878018)
Agree. Open source OAuth go libraries have this too. It's like working with C++ code from the bad old days when everyone thought inheritance was the primary abstraction tool to use.