←back to thread

Go is still not good

(blog.habets.se)
644 points ustad | 4 comments | | HN request time: 0.001s | source
Show context
the_duke ◴[] No.44983331[source]
I personally don't like Go, and it has many shortcomings, but there is a reason it is popular regardless:

Go is a reasonably performant language that makes it pretty straightforward to write reliable, highly concurrent services that don't rely on heavy multithreading - all thanks to the goroutine model.

There really was no other reasonably popular, static, compiled language around when Google came out.

And there still barely is - the only real competitor that sits in a similar space is Java with the new virtual threads.

Languages with async/await promise something similar, but in practice are burdened with a lot of complexity (avoiding blocking in async tasks, function colouring, ...)

I'm not counting Erlang here, because it is a very different type of language...

So I'd say Go is popular despite the myriad of shortcomings, thanks to goroutines and the Google project street cred.

replies(7): >>44983372 #>>44983413 #>>44983414 #>>44983469 #>>44983501 #>>44983524 #>>44983597 #
zwnow ◴[] No.44983372[source]
What modern language is a better fit for new projects in your opinion?
replies(5): >>44983386 #>>44983445 #>>44985494 #>>44989834 #>>45025592 #
gf000 ◴[] No.44983445[source]
For web frontend: js

For ML/data: python

For backend/general purpose software: Java

The only silver bullet we know of is building on existing libraries. These are also non-accidentally the top 3 most popular languages according to any ranking worthy of consideration.

replies(4): >>44983471 #>>44983521 #>>44983598 #>>44984319 #
tedk-42 ◴[] No.44983471[source]
I'd swap java with go any day of the week. I never liked how much 'code-padding' is required with java `public static void main`
replies(4): >>44983534 #>>44983539 #>>44984770 #>>44985673 #
kasperni ◴[] No.44983539[source]
For Java 25 which is planned to be released in a couple of weeks:

----- https://openjdk.org/jeps/512 -----

First, we allow main methods to omit the infamous boilerplate of public static void main(String[] args), which simplifies the Hello, World! program to:

  class HelloWorld {
    void main() {
      System.out.println("Hello, World!");
    }
  }
Second, we introduce a compact form of source file that lets developers get straight to the code, without a superfluous class declaration:

  void main() {
    System.out.println("Hello, World!"); 
  }
Third, we add a new class in the java.lang package that provides basic line-oriented I/O methods for beginners, thereby replacing the mysterious System.out.println with a simpler form:

  void main() {
    IO.println("Hello, World!");
  }
replies(1): >>44986880 #
aatd86 ◴[] No.44986880[source]
so getting closer to Go's syntax, n'en déplaise à certains, apparently. :-)
replies(1): >>44987374 #
gf000 ◴[] No.44987374{3}[source]
Except for the extra 3 lines of if err for every statement..
replies(1): >>44988383 #
1. aatd86 ◴[] No.44988383{4}[source]
Perhaps that it is coming sooner than you think... It all started with adding Value types, now syntactic refinements à la Go... Who knows? :-) You'll be very happy.

edit: hold on wait, java doesn't have Value types yet... /jk

replies(1): >>44991172 #
2. Capricorn2481 ◴[] No.44991172[source]
> syntactic refinements à la Go

An oxymoron if I've ever heard one.

replies(1): >>44991579 #
3. aatd86 ◴[] No.44991579[source]
???!

refinement: the process of removing impurities or unwanted elements from a substance.

refinement: the improvement or clarification of something by the making of small changes.

public static void in a class with factory of AbstractFactoryBuilderInstances...? right..? Yes, say that again?

We are talking about removing unnecessary syntactic constructs, not adding as some would do with annotations in order to have what? Refinement types perhaps? :)

replies(1): >>44992747 #
4. Capricorn2481 ◴[] No.44992747{3}[source]
> public static void in a class with factory of AbstractFactoryBuilderInstances

That's not syntax. Factory builders have nothing to do with syntax and everything to do with code style.

The oxymoron is implying syntax refinements would be inspired by Go of all things, a language with famously basic syntax. I'm not saying it's bad to have basic syntax. But obviously modern Java has a much more refined syntax and it's not because it looks closer to Go.