Will Golang replace Java as the top choice for Android app development? Will apps like Slotocash Casino mobile app benefit from using Golang in the future?
Is a new programming language needed?
With so many programming languages already in existence, is another programming language needed? In 1973, the C Programming Language became powerful with the introduction of structs. Ten years later, in 1983 C++ came onto the market (C with classes).
The C Programming Language is an excellent programming language when speed and memory usage are a top priority. But both C and C++ were developed at a time before Unicode. And since direct memory manipulation is a major feature of the language, trying to use Unicode in C applications becomes complicated.
The C Programming Language was designed when all characters of all languages fit into 1 byte. A Unicode character can be stored in 1 byte, 2 bytes, or 4 bytes.
On the other end of the spectrum are interpreted languages. Bash, Perl, Python, and PHP are all well known interpreted languages. The code is compiled while it is run. The benefit is that it is not machine-dependent. The downside is speed. So the programming is trading ease for speed.
What about Golang?
Many new programmers ask the question, “What is the best programming language?” or “Which programming language should I learn?” That would be the same as going into Home Depot and asking the store manager, “What is the best tool?” The answer is, “It depends on what you are trying to do.”
Google processes a lot of data. Some are preprocessed and stored in databases. While other data is processed on an as-needed basis. This data comes from all over the world and uses Unicode characters, not ASCII characters.
The designers of Go call Go “what C should have been”, and this can definitely be seen with how Golang handles Unicode characters.
When specifically talking about Unicode characters, they are called “runes”. When talking about ASCII characters, they are called “bytes”. An “Array of bytes” are called “slice of bytes”. An “array of runes” is a “slice of runes”.
When talking about arrays, it is a data type that has overhead connected with it. The same is true with strings. A string in Golang is an advanced data type. It is not the same as a “slice of bytes” which deals directly with the actual memory.
For an experienced programmer just learning Golang, it is a different way of thinking about characters, but when it comes to actually programming with data that is Unicode intensive (for example, Hebrew and Arabic), Golang is a pleasure to work with.
Golang and concurrency
The Go language has built-in facilities, as well as library support, for writing concurrent programs. Concurrency refers not only to CPU parallelism but also to asynchrony: letting slow operations like a database or network-read run while the program does other work, as is common in event-based servers.
The primary concurrency construct is the goroutine, a type of light-weight process. A function call prefixed with the go keyword starts a function in a new goroutine. Current implementations multiplex a Go process’s goroutines onto a smaller set of operating system threads.
While a standard library package featuring most of the classical concurrency control structures (mutex locks, etc.) is available, idiomatic concurrent programs instead prefer channels, which provide send messages between goroutines. Optional buffers store messages in FIFO order and allow sending goroutines to proceed before their messages are received.
Unlike previous concurrent programming languages, Go does not provide any built-in notion of safe or verifiable concurrency. While the communicating-processes model is favored in Go, it is not the only one: all goroutines in a program share a single address space. This means that mutable objects and pointers can be shared between goroutines.
Let’s look at our original example of a Casino. Let’s say it is a very popular casino website, and it gets thousands of visitors an hour. If the program ran in a queue, the first person in line would get to play the game, and when they were finished, the next person in line can play the game. And the queue would run accordingly.
But with concurrency, Golang becomes a gatekeeper to other Golang programs (sub-processes). The first in line tells the gatekeeper what they want to play, and then Golang sends the player off on a new process.
That process does not need to finish before the next customer that wants to play a game puts in their request. Because each game is a separate process, it does not matter how long or how short the game is being played, or how simple or how complex the game is.
Okay, the casino example may not be the best, because a large portion of the casino code is with the user interface (HTML and JavaScript), not server code (Golang).
But you get the idea.