this post was submitted on 23 Jan 2024
22 points (100.0% liked)

Programming

17270 readers
39 users here now

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities [email protected]



founded 1 year ago
MODERATORS
 

First of all, thank you to all the amazing things you do for the self-hoster, FOSS comunity ! We won't be able to have those shiny things without you ! I'm not a dev and have just played arround with python (and I know how most of you feel about it 🤫) so I have very limited knowledge regarding programming languages.

I know whats a low level language (C, C#, rust?), general scripting tools and even heard about assembly. And it always baffles me how all those coding lines rule and make our microchips communicate and understand each other, but that's another story ! This is about golang !


As a self-hoster enthousiast, when I'm looking at a github repository, I always check the programing language used, even though I have no idea if those integrate well with each other or if it's the best programming language for that kind of application.

And everytime I see golang, It makes me smile and have a feeling it's going to be a good application. I know it also depends on the programmer skills and creativity, but all my self-hosted Go apps works like a charm.

Traefik is the best example, I never had any issue or strange behavior, except for wrong configuration files on my side,

Or navidrome a music server compatible with subsonic, also written in go, is working great and fast AF !

Or Vikunja, the todo app... and many more !

I'm probably biased because I have no idea of how the programing realm works, but I have the feeling that Golang is a certificate for good working and fast applications. Just to bad it's backed/supported by google (uuhhg)

Feel free to debate and give me your personal opinion of the Go language, if my feelings are right or Am I just beeing silly :).

Thanks for reading through 👋

all 12 comments
sorted by: hot top controversial new old
[–] [email protected] 5 points 10 months ago

I am a dev and I concur. I’ve also noticed golang projects are more likely to be good quality compared to projects written using most other popular languages

As to why that is.. well, all I can really do is compare languages on their details and make some kind of speculative guess at the sociological implications lol

I don’t see golang frequently picked for use in your stereotypical “enterprise business factory REST microservice” project. Typically it’s like, for infra projects. At least in my experience. So that probably has a lot of downstream impacts on our perception of quality. Hmm

[–] [email protected] 4 points 10 months ago* (last edited 10 months ago) (1 children)

static linking is probably the word you're looking for

also one of the most efficient garbage collectors

[–] [email protected] 2 points 10 months ago (1 children)

Haha, garbage collection, funny combination ! I read through this article, but really have no idea what he/she is talking about :/ feels bad !

Thank you to put some technical wording on what I'm experiencing !

[–] [email protected] 1 points 10 months ago* (last edited 10 months ago) (1 children)

In short when a program runs, it allocates memory for the data it is using. Then the garbage collector which you can think of a 'program' (though not in a strict sense, just a part of the runtime), takes care of freeing the memory which is no longer needed. In languages with manual memory management, like C or C++ it is up to the programmer to properly (de)allocate memory, which might result in issues like dangling pointers (references to already freed memory, which might cause unpredictable behavior and compromise your whole system's security) or memory leaks (gradually increasing memory usage over time in absence of user action that would prompt that, like e.g. opening more and more browser tabs, which is also partly why in the past you've often had to restart your PC every once in a while to free some trashed memory. In Go most of the stuff is done by GC and only code that uses the unsafe package or relies on external resources, like reading a file or database connection needs to have programmatic termination of access to these (usually by calling something like defer db.Close() ).

Also Go is a nice balance between low and high level, one of such examples is the use of pointers. They might be complicated for most beginner coders, but in reality there is seldom any use of uintptr, double pointers and even slice (list) pointers, but it has a tremendous performance amount since when you do some operation, especially loops where without a pointer you would copy the data you're iterating through by value instead of just it's memory address.

Which is especially important with large sets of data, where 160 bytes might seem miniscule with one call, but if you loop over 1 million records, that's 160 MB (for example in some database used by municipal authorities of a large city). That's one of the reasons some databases like CockroachDB were written in Go.

[–] [email protected] 1 points 9 months ago (1 children)

Thanks for the ELI16 !!!

Also Go is a nice balance between low and high level, one of such examples is the use of pointers.

Yeah, I read/heard about pointers being on of the most hated/complicated stuff in C for beginners, but that's also C's advantage over other languages, isn't it? You have more control on how memory is used ? Or is that considered "bad practice", prone to error, to today's standards? (I hope it make sense and that you understand what I'm trying to express :/). And that's the reason way something like Go and Rust? are becoming more prevalent.

Like e.g. opening more and more browser tabs, which is also partly why in the past you’ve often had to restart your PC every once in a while to free some trashed memory.

Yeah I remember that time, looking for THE best browser that wasn't eating to much memory (settle with Firefox). I thought killing the process in windows was enough?

CockroachDB

xD

[–] [email protected] 2 points 9 months ago (1 children)

Rust's memory safety is much different (ownership, lifetimes, immutability). Also Rust has null safety while Go doesn't. Go has some uninitialized variable use protection, but you can still screw up if you do stuff like accessing a struct field that hasn't been assigned a value. In C there's much higher chance of segfaults, use-after-free precisely due to manual memory management (malloc and free, which do not exist in Go). For example earlier versions of Java and most interpreted languages of the past whilst offering memory safety, consumed a lot of system resources, making them unsuitable for performance critical things like games, drivers etc.

Then innovations in memory management and the resulting safety improvements and easier development these new languages offer allowed using them for writing performance critical code. Hope that answers your question.

[–] [email protected] 1 points 9 months ago

Yes :) Thank your very much for sharing your knowledge !! It's just difficult to understand everything with all the new related vocabulary I never heard of. But I think I get the general gist !

Just one last question, it's something that's on my mind for a while ! I know it's a hot potato in the programming world and has been asked several times over here in the community, but I'm really interested on your opinion on that topic:

C, C++ (C#? I dunno the difference between the 3, so pardon me for my ignorance) are they slowly dying out and being replaced by something like Rust (or other low level language?)? Because C and derivatives are prevalent everywhere and probably everything , and If I get it right, it's the language, that programs other languages. So shifting to something new takes time, resources and probably is "risky"?

I'm asking that question because, recently read about Linux slowly merging some rust coding in the Linux kernel.

[–] [email protected] 3 points 9 months ago* (last edited 9 months ago) (1 children)

As a developer whos had python and rust web applications in production, golang is an almost perfect balance between complexity and power. Its simple enough for anyone to learn (yes you!) yet powerful enough to build large, performant programs. It also has an amazing model for concurrency which is basically multitasking.

The reason lots of networking applications use it is because networking requires a lot of this multitasking and demands efficiency. Part of the reason they tend to be built well is that every funtion that might have an error requires you to explicitly handle it or ignore it. Also the syntax is very simple relative to other languages, so you dont often get cryptic, hard to understand code.

Golang also compiles to one nice executable rather than requiring the host system to have certain files/programs so more time can be spent on the code rather than the deployment.

It of course has it's rough edges but I think it's underrated.

[–] [email protected] 2 points 9 months ago (1 children)

Thanks for your insights !

The reason lots of networking applications use it is because networking requires a lot of this multitasking and demands efficiency.

So that's one reason why traefik devs chose golang ! Good to know :)

Its simple enough for anyone to learn (yes you!)

Haha, If I had enough time I would probably chose Go and Rust. But hosting, networking and linux stuff are already taking way to much of it ! IMO if you haven't learned any programming language early, it's going to be a nightmare to follow up. Also, I'm already struggling with English xD !

[–] [email protected] 2 points 9 months ago

Oh I know it, I would learn the whole world if I could. Your English is great!

[–] [email protected] 2 points 10 months ago

If we're making a list of great projects written in Go, I'm putting in a word for PocketBase which is a based around sqlite that works as a backend-as-a-service and does all the tedious auth work for you. It's the perfect sideproject backend.