# Introduction to Go

## 🍿 What is Go

* It is an **open-source** **programming language** **developed** by **Google** in **2007**.
* Has **designed** and **created** by **Robert Griesemer, Rob Pike, and Ken Thompson**.
* It is a **statically typed, concurrent**, **compiled language** that feels like a dynamically typed, interpreted language.
* It is **oriented** to take **advantage** of **systems** with **multiple processors** and **network processing**.

## 🍿 Go History

Go was designed at **Google** in **2007** **to improve programming productivity in an era of multicore, networked machines, and large codebases.** The designers wanted to address criticism of other languages in use at Google, but keep their useful characteristics.

**Static typing and run-time efficiency** (like C) **Readability and usability** (like Python or JavaScript) **High-performance networking and multiprocessing** Its designers were primarily motivated by their dislike of C++.

## 🍿 What are the advantages of using Go

* **Syntax and readability:** Being a typed and well-structured language, go makes reading and creating code easier for others, which is especially useful in work teams. It also allows the code to be cleaner and more maintainable over time.
* **Efficiency and performance:** Go stands out especially for its efficiency and speed since its compiler is optimized for this, leaving behind many high-level programming languages ​​and even competing with low-level ones.
* **Automatic memory management:** Go has a garbage collector which avoids dealing with memory management and makes the development process faster without sacrificing efficiency.
* **Built-in concurrency and parallelism:** Go has built-in concurrency through goroutines which allows us to create concurrent programs and manage their communication across channels, and take full advantage of multicore and networked machines.&#x20;
* **Portability and quick builds:** Thanks to the go compiler we have great portability since it has cross-compilation which allows us to create executable code for another platform other than the one on which the compiler runs, for example, we can compile code for Windows from Linux.

## 🍿 What are the disadvantages of using Go

* **Less versatility in specific domains:** Go can be a more or less appropriate language for certain cases and that is why it is important to take into account what we are going to develop before choosing a programming language, for example for machine learning or the scientific or statistical field, it may be better to use Python or R instead of Go.
* **Lack of advanced object-oriented features:** Go is not directly an object-oriented programming language and although it allows the implementation of certain principles of object-oriented programming through the structs and interfaces, the truth is that it does not have an advanced implementation of all the principles such as inheritance by what is an issue that we should take into account
* **Immature compared to other older programming languages:** Although Go has a robust standard library, it must be taken into account that it is a relatively new language and that several of the libraries that exist for specific themes are maintained by the community, so it can be tedious to manage dependencies.

## 🍿 How to Install

I genuinely recommend seeing the official documentation for the installation

{% embed url="<https://go.dev/doc/install>" %}

## 🍿 Additional resources

{% embed url="<https://go.dev/doc/>" %}
Official Go Documentation
{% endembed %}

**Also, check the books section**

{% content-ref url="../../../books" %}
[books](https://fatchicken277.gitbook.io/fatblog/books)
{% endcontent-ref %}
