go 學習筆記之初識 go 語言
Go
是一種開源程式語言,可以輕鬆構建簡單,可靠,高效的軟體.
摘錄自 github: https://github.com/golang/go,其中官網(國外): https://golang.org 和官網(國內): https://golang.google.cn/
Go
是 Google
公司推出的靜態強型別,編譯型,併發型,並具有垃圾回收功能的開源程式語言,最初由 Robert Griesemer
, Rob Pike
,Ken Thompson
三人主持開發,後來陸續加入其他開發者,最終於 2009 年 11 月正式開源.
創始人都是大神
Go
的三位主要創始人分別是: 羅伯特·格瑞史莫(Robert Griesemer
Ken Thompson
)
- 羅伯特·格瑞史莫(
Robert Griesemer
)
JS V8
引擎,Chubby
,Java HotSpot
虛擬機器,Sawzall
語言和 Strongtalk
系統
github: https://github.com/griesemer
- 羅勃·派克(
Rob Pike
)
Plan 9
作業系統和UTF-8
編碼
github: https://github.com/robpike
- 肯·湯普遜(
Ken Thompson
)
UNIX
作業系統 ,Plan 9
作業系統,B
語言,UTF-8
編碼
github: https://github.com/ken
如此厲害的三位大牛合作創作的 Go
語言還能差到哪裡去呢?
吉祥物也很可愛
原來的 logo
是一隻可愛的囊地鼠,英文名叫 gopher
.
新的 logo
是現代化圖示,代表更快更強,體現速度和效率.
網上流傳甚廣的一組很萌很可愛的吉祥物,並附上 github 連結: https://github.com/tenntenn/gopher-stickers
體驗 go 語言魅力
- 案例一
fmt.Println("Hello, 世界")
: 輸出字串並換行
package main import "fmt" func main() { fmt.Println("Hello, 世界") }
- 案例二
a, b = b, a
: 互換變數a
和b
的值,而其他語言一般都需要引入臨時變數.
package main
import "fmt"
func main() {
var a = 3
var b = 4
fmt.Println(a, b)
a, b = b, a
fmt.Println(a, b)
}
- 案例三
go
+chan
關鍵字輕鬆完成平行計算
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println(pi(5000))
}
func pi(n int) float64 {
ch := make(chan float64)
for k := 0; k <= n; k++ {
go term(ch, float64(k))
}
f := 0.0
for k := 0; k <= n; k++ {
f += <-ch
}
return f
}
func term(ch chan float64, k float64) {
ch <- 4 * math.Pow(-1, k) / (2*k + 1)
}
到底好用不好用
Go
語言是雲端計算時代的 C
語言也稱為21 世紀的 C
語言,由此可見,Go
的地位非同一般.
Go
語言的誕生是為了提高生產效率,專門對多處理器系統應用程式的程式設計進行了優化,使用Go編譯的程式可以媲美C或C++程式碼的速度,而且更加安全,支援並行程序.
- 執行效率高,開發高效,部署簡單.
執行效率高是因為編譯性語言與解釋性語言相比,開發高效是語法簡單,部署簡單是直接部署編譯後的程式.
- 語言層面支援併發,易於利用多核實現併發.
不同於 php,只需要 go 配合 channel 即可完成程序或執行緒所做的工作.
- 內建
runtime
並支援垃圾回收
類似
Java
虛擬機器支援垃圾回收,不必手動進行記憶體管理.
- 簡單易學,豐富的標準庫,強大的網路庫.
學習成本低,語法簡單但表達能力強,支援函數語言程式設計,面向物件程式設計等多種程式設計正規化.
- 內建強大的工具(
gofmt
),跨平臺編譯,內嵌C
支援.
不同的人有不同的程式碼風格,可轉化統一風格
志同道合有幾人
Docker
: 是為開發人員構建和執行應用程式而構建的平臺
https://www.docker.com/
Kubernetes
: 自動化容器部署,擴充套件,管理的應用程式
https://kubernetes.io/
Etcd
: 分散式鍵值對儲存系統
https://etcd.io/
baidu-netdisk-downloaderx
: 一款圖形介面的百度網盤不限速下載器,支援Windows
,Linux
和Mac
https://github.com/b3log/baidu-netdisk-downloaderx
pan-light
: 百度網盤不限速客戶端,golang + qt5
, 跨平臺圖形介面
https://github.com/peterq/pan-light
自學技術哪家強
- https://golang.org/ : The Go Programming Language
- https://golang.google.cn/ : The Go Programming Language
- https://tour.go-zh.org/welcome/1 : Go 語言之旅
- https://studygolang.com/ : Go語言中文網- Golang中文社群
- https://www.runoob.com/go/go-tutorial.html : Go 語言教程| 菜鳥教程
自問自答解疑惑
go
和golang
是什麼關係?
go
是 golang
的簡稱,golang
是 go language
的縮寫,即 go 語言
.
go
的常用IDE
有哪些?
獨立整合工具主要有 LiteIDE
和 GoLand
兩種,但是常見 IDE
基本上均提供各種 Go
外掛,支援 Windows
,MacOS
和 Linux
常見作業系統.
go
的常見Web
開發框架有哪些?
Beego
,Iris
和 Gin
等,國人用的比較多是 Beego
,目前資料也比較齊全.
無總結不成文章
Go
是 Google
出品的開源程式語言,出身名門註定不凡,並且擁有十分活躍的社群環境.
國內使用 Go
語言比較早的公司主要有七牛雲和 beego
,其中七牛雲主要是雲端儲存方面的業務,這也正是 Go
支援高併發分散式的特色,而 Beego
是 Go
的 Web
開發框架,支援 MVC
程式設計模型,不愧是國人開發深受國人喜愛.
同時,今年著名的 bilibili
原始碼洩露事件也讓我們看到了 Go
的身影,側面說明了 Go
越來越流行,不愧是 21 世紀的 C
語言啊!
好了,暫時沒有別的廢話了,本文到此為止,下一章將開始介紹 Go
語言的環境搭建與 IDE
的基本配置,敬請期