Choosing a programming language is generally based on the business needs that you face today, combined with the characteristics of the language.
GO is a compiled language, inspired by the syntax of C, typed, developed by Google. Its design allowed programmers who have several years with C to migrate to a current language but with the same power.
It has gained a lot of strength, renowned companies trust Golang, including Dropbox, Docker, Facebook, Netflix, Uber and Twitter.
So let’s talk about the advantages of Go and its suitable business scenario.
Advantages of Go
Support for asynchronous and high concurrency
The goroutine is simple to create, the system consumes a small amount, and the channel mechanism facilitates communication between goroutines, making it easy to implement a highly concurrent service.
Goroutine and channel make it very easy to write highly concurrent server software, and in many cases there is no need to consider the locking mechanism and the resulting problems. A single Go application can also effectively utilize multiple CPU cores, and the performance of parallel execution is good. This is also a world of Python. Multi-threaded and multi-process server programs are not easy to write, and due to the global lock GIL, multi-threaded Python programs can not effectively use multi-core, can only be deployed in multiple processes; if using multiprocessing in the standard library The package will pose a lot of challenges for monitoring and management [we use the supervisor management process, which is not good for fork support]. When deploying Python applications, it is usually to deploy one application per CPU core, which will waste a lot of resources. For example, if a Python application needs to occupy 100MB of memory after booting, and the server has 32 CPU cores, then leave a core for System, running 31 application copies will waste 3GB of memory resources.
Go’s program, compiled as a binary file, can be run directly, no need to install other dependencies, very convenient.
At runtime, the initial memory used is extremely low. The same function, if the program is written well, consumes less memory than other languages, which means less computing resources are consumed.
Go compiles a static executable that has no external dependencies other than glibc. This makes deployment very convenient: only one basic system and the necessary management and monitoring tools are needed on the target machine, and there is no need to worry about the various packages and library dependencies required by the application, which greatly reduces the maintenance burden. This is a huge difference from Python. Due to historical reasons, Python’s deployment tools are quite confusing [such as setuptools, distutils, pip, buildout and compatibility issues]. The official PyPI source is often problematic and requires a private image to be built. It takes a lot of time and effort to maintain this image.
The type of derivation, that is, the variable does not necessarily need to define the type, the type is deduced by the compiler, which is a function that emerges in many new languages (such as Kotlin and Swift), avoiding many types of definitions, and greatly improving programming efficiency.
Support type reflection, can handle common words for some data structures, can be serialized and deserialized (such as the built-in json Marshal/Unmarshal function), in your own business, you can implement type functions. A serialized, deserialized package of data structures.
Field tag, can achieve automatic processing of the struct field, such as the function of json Marshal/Unmarshal mentioned above, you can define the last serialized field name, you can also define the field as When empty, do you want to include this field; similarly, we can define the tag type ourselves and define the semantics of the tag to meet our needs.
Support for multiple return parameters, a language feature I liked when I wrote Python before, and it is also very handy in Golang.
Built-in GC, most of the time do not need to manually handle the allocation and release of memory
Good Language Design
From an academic point of view, the Go language is very mediocre and does not support many advanced language features; but from an engineering perspective, Go’s design is very good: the specification is simple enough and flexible, and programmers with other language foundations can quickly get started. . More importantly, Go has a well-developed tool chain that greatly enhances teamwork consistency. For example, gofmt automatically typeset Go code, which largely eliminates the problem of inconsistent code layout style written by different people. Configure the editor to automatically run gofmt when editing the archive, so you can place the position at random when writing the code, and automatically become the correct typesetting code when you archive. There are also very useful tools like gofix, govet and more.
Good performance. Although not as good as C and Java, it is usually an order of magnitude higher than native Python applications and is suitable for writing some bottlenecks. Memory usage is also very low.
Gofmt, after configuring gofmt in the editor, makes the code style of everyone unified. When working together in the team, this tool is extremely useful, no longer need to set a lot of mandatory code specifications.
GoLand, this is the IDE produced by JetBrains. Since I used it, I feel that writing code every day is very pleasant.
Further, we will study about the Golang Frameworks:
1. Framework: Faygo
Faygo is a fast, compact Go Web framework that produces high-performance web applications (especially API interfaces) with minimal code. Simply define the struct Handler and Faygo will automatically bind, validate the request parameters and generate an online API document.
2. Framework: Essgo
Essgo is a simple, stable, efficient and flexible web development framework developed by Go. Its project organization form has been carefully designed to achieve separation between front and rear, system and business separation, perfect compatibility with MVC and MVVC and other development modes which is very conducive to the development of enterprise applications and API interfaces. Of course, the most noteworthy is its breakthrough support for runtime route rebuild, developers can easily configure routing in the Admin background and enable/disable modules or operations, add/remove middleware, and more!
3. Framework: Macaron
Macaron is a Go Web framework with high productivity and modular design. The framework follows the basic ideas of Martini and builds on it.
4. Framework: HuGo
HuGo is a Go Web framework based on my previous php development experience. Strive to be simple and straightforward, in line with popular writing habits, and at the same time excellent performance. HuGo is based on MVC’s architectural pattern, enabling REST-supported automatic route distribution, simplifying HTTP requests and view operations. At the same time, HuGo provides a simple and straightforward data access layer for efficient and direct manipulation of database content. It is a generator of static websites.
You can combine it with frameworks like Bootstrap or Materialize for FrontEnd.
5. Framework: Baa
Baa is a simple and efficient Go web development framework. There are mainly routing, middleware, dependency injection and HTTP context. Baa does not use reflections and regulars, and there is no magical implementation.
6. Framework: Gin
It is a framework that promises to be faster than many others, it is a quite simple but powerful tool for creating microservices. A very interesting article Build RESTful API service golang in using gin-gonic framework.
7. Framework: Beego
At the end of the course the framework is mentioned, it has a MVC model that is worth using. If you install bee this helps a lot to accelerate the development. It has its own ORM.
8. Framework: Buffalo
Use the Gorilla toolkit to manage routes, sessions, cookies, etc. It is also compatible with the pop ORM which supports MySQL / MariaDB, PostgreSQL and SQLite. If you run it with buffalo dev You can reload the hot code from the backend to the frontend and see the changes live.
9. Framework: Revel
It is a quite complete framework and not for nothing the one used in the course. It is fast, simple and configurable.
10. Framework: Gorilla
Gorilla is not a framework but a set of libraries for web and Golang Development Services, this is not me saying but them. If you go for something very basic to try web socket for example, Gorilla is a good option.
GO, is a very powerful language with the stability of a low level language and with innovations such as high level this makes this language very special for backend developers, who have to process large amounts of data. The ease of learning and mastering it makes development relatively fast.