---
# System prepended metadata

title: Day01 介紹-開門見GO法

---

# Day01 介紹-開門見GO法  
啊，一開門就見GO！真傷...  
其實我不知道能不能撐過30天  

## 介紹一下GO  
* Go語言(Go Language)又稱**Golang**，是Google在2009年推出的一個實驗性項目的程式語言，會出現這個語言的原因之一是因為Google工程師們不是那麼喜歡使用C++。

* Go語言在2007年開始設計、2009年正式公開、2011年釋出v1.0版本，之後大約每半年的時間釋出下一個版本，如今已來到v1.15 (2020/08)。  

* Golang 一開始是由C語言編寫而成。執行程式需要經過**編譯**，為**強**型別程式語言。  
跟C語言有點類似、也具有指標功能，如果有學過C語言的很容易上手。也有人說Go是現代版的C語言，冠上如此華麗的美稱。但無論如何，想用來取代C語言終究是有一定難度的。  
* 效能比Python好，但略比C差，然後常常被跟Rust比來比去。  
內建**併發**，很容易的就能寫出多線程程式。  
代表能榨乾CPU的資源，或者說是以最少的資源做最多的事、不浪費每顆CPU。  

* 跨平台、容易部署，內建垃圾回收機制。而且簡單易學。

* 最大的重點是，GO語言 **很潮**


## Go語言工程師化  

Go語言有著一堆很估摸龜毛的特性與怪癖，  
很適合孤僻的工程師們使用，稍微提一下幾個特點：  
1. 變數宣告了就要用！不然編譯器爆你錯！  
2. 套件import就要用！
3. 大括號排版都要照格式  
4. 還有gofmt(go format)可以幫助排版，固定格式  
5. 變數字開頭大寫代表開放外界使用  
6. 充斥大量的 if err != nil{
}  
判斷錯誤的方法。  
發生預期之外的事情就返回、跳出  
往下執行的程式是預期中的事情  
6. ...  

等等，還沒完！  
Google對於程式風格的講究，推了一大堆嚴謹的[命名規範與慣例](https://golang.org/doc/effective_go.html)，  

反正人家Google是軟體界大佬，  
大佬的建議、好的Coding習慣，多少就遵守唄。  


## Go可以幹嘛  

簡而言之，Go語言穩定，也很容易上手，  
工程師們寫出的程式碼風格較一致，  
常被拿來架設伺服器以及網站後端。  

除此之外，聽過Docker、Kubernetes嗎？  
這兩個鼎鼎大名的容器專案是使用Go語言編寫的產物之一。  
也可以看看在Github開源社區中的[星星排名](https://gitstar-ranking.com/repositories)與[Go百大專案](https://github.com/EvanLi/Github-Ranking/blob/master/Top100/Go.md)。  

喔，學Golang還能**活口飯吃**[ ~~重點是很大碗?~~](https://github.com/golangtw/jobs/issues)  
社群人數正往上攀升成長、成為最具前途及錢途的程式語言之ㄧ。  


## 題外話  
* 這是Golang的吉祥物，是一隻地鼠，先記住他的樣子，  
  因為之後會在很多地方看到他在挖洞讓你跳。  
![Gopher](https://blog.golang.org/gopher/gopher.png)![Go logo](https://golang.org/doc/gopher/frontpage.png)  

* 而開發Go程式的人通常就叫作**Gopher**，  
長這樣或這樣，這大概就是你我現在的樣子。  
![Gopher](https://blog.golang.org/gopher/header.jpg)


## 尾聲

> 一本好的書籍內容編排不應過於沉悶，不應全盤談論晦澀的技術，  
> 而是讓讀者看懂、看得下去，同時學習到新知、也能獲得成就感。  

Go繁不及備載 一文成就感可能略顯不足，   
但我盡量以無腦詼諧的筆調及範例來作說明，盼大家看得下去。  