Why I learn Go and why I never regret

Background

Few months earlier, when i started to design on my final year project for bachelor degree, I needed a programming language that can handle concurrency well, and at the same time, with modern syntax. I looked into multiple programming languages, and Go stood out from my opinion list.

Learning process

Pick up Go

When I decided to pick up Go, the first thing I do was looking for example project and read the source code. It turned out that was a bad move. Due to the syntax and the structure of Go. So I took a step back, by going through every slides of A Tour of Go. Surprisingly, I took me one evening to complete it, and I was able to read Go code after that. The part that I took most of the time were topic on concurrency and channel. I used the old-fashion way, visualised by drawing out on paper, it really helped me.

Think like Go

One of the challenges that I faced was the design paradigm. Coming from object-oriented and functional programming background, Go does not make any sense to me at the first though. Imagine without the powerful functions like map, reduce that available to a lot of languages. Basically, in Go we have to write loop ourselves. Imagine handle errors without try and catch. It took me awhile to get used to it.

Read more code

As I have picked up the basics, I continued my learning journey by reading more Go code.

The more I read, the more I realised how much I don't know about Go.

Open source definitely helps. I read a lot of open source code.

Why I never regret

After several months working in Go, it does bring benefits to me

Open up new opportunity

It increase the value of ourselves when we learn or know more things, especially in the technology industry where things are changing so fast. Go might not the most popular language out there, but it is growing.

Think from another perspective

As I mentioned earlier, in Go we do not have the powerful functions in most programming languages, it allows us to think the solution from the most basic programming structure. It might not be comfortable for some people, but it helps me to think the problem from another perspective.

Performance is awesome

Go's performance is awesome. I do not run any benchmarks to do comparison, for me I think is pretty good. The compilation time is really quick, and the CPU utilisation also quite low for my application.

Conclusion

Go is an awesome programming language, and I encourage all of you to give it a try. I will continue my journey in Go with different applications.

Comments (2)

Mark's photo

Interesting to read some thoughts about Go! I've been wanting to know more about why it's popular.

It does have some unconventional design choices that make it interesting, especially since it's cutting popular features compared to extra languages, rather than introducing extra ones:

I guess it might be something one gets used to... But I remain highly skeptical about design choices like loops over map and filter.

I mean, even Java, which was very much not a functional-programming language initially, which is rather conservative about adding new complexity, and has kind of crappy lambdas, has added map and filter now.

So it's hard for me not to be skeptical about Go's choice in this regard. Especially since the justifications I find are things like:

I haven't had occasion to use it once. Instead, I just use "for" loops. You shouldn't use it either. -Rob Pike

I know Rob Pike is smarter than me, but it's 'almost every language vs Go', I'm gonna need better than "you shouldn't use it".

I have to wonder if it's not just because there are no generics. Which is also something I have a very hard time getting behind...

Do you miss any of that, or has Go found a better way?

Wei Lun's photo

Software Engineer

Hi Mark, I believe things will change in Go, even though the generics took forever to implement. At current stage of Go, lack of generics is really bring a lot of inconvenience. I have to implement the multiple functions with exact behaviour just because they are different type. I think people would prefer functional approach than a typical for loop, as the comprehension speed in today's context really important.