Go語言
Google開源
編譯形語言
21世紀的C語言
Go語言的特色
簡單易併發
開發效率高
執行性能好
Go語言應用的領域
服務端開發
日誌處理
文件系統
監控服務
容器虛擬化
Docker
k8s
Docker Swarm
存儲
etcd
Tidb
Groupcache
Web開發
net/http
Gin
Echo
區塊鏈
以太坊
fabric
開發環境
官網地址:
https://golang.google.cn/dl/
選擇對應版本 下載 安裝
(我這裏是mac 因此使用brew下載)
brew install go
完成後使用 go env 查看版本
配置go路徑環境
主要是GOROOT和GOPATH
GOROOT:就是go的安裝環境
GOPATH:做爲編譯後二進制的存放目的地和import包時的搜索路徑。其實說通俗點就是你的go項目工做目錄。一般狀況下GOPATH包含三個目錄:bin、pkg、src。
src目錄下主要存放go的源文件
pkg目錄存放編譯好的庫文件,主要是*.a文件;
bin目錄主要存放可執行文件
注意:千萬不要把GOPATH設置成go的安裝路徑,能夠本身在用戶目錄下建立一個目錄,例如mygo
通常安裝好go以後,使用go env查看一下當前環境。此時顯示出來的GOROOT就是你使用brew安裝go的安裝目錄,這個路徑要記下來。接下來要在bash_profile文件中進行配置。
Golang /Go調試工具delve
Windows or Linux
go get github.com/derekparker/delve/cmd/dlv
Mac使用brew下載
brew install go-delve/delve/delve
IDE下載 Goland
http://www.jetbrains.com/go/
下載後激活正常使用
Go語言的項目結構
-GOPATH
-src //目錄下主要存放go的源文件
-網站域名/公司級別倉庫域名
- 做者/機構
- 項目name
- 模塊a
- 模塊b
-bin // 目錄主要存放可執行文件
-pkg //目錄存放編譯好的庫文件,主要是*.a文件;
編譯: 只須要編輯主文件便可 不須要編譯包
cd /Project/pkg ## 在哪裏編譯 編譯後的文件就在那裏
go build ../src/xxxx/xxx.go
或指定編譯後存放的地址
go build -o Project/pkg/name src/xxx/xxx.go ## -o 參數指定編譯後存放的位置 最後的/name 指的是編譯後生成的文件name 也能夠不指定
*** 跨系統編譯
Mac下編譯Linux和Windows平臺64位可執行程序須要設置
Linux
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build;
Windows
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build;
Linux下編譯Mac和Windows平臺64位可執行程序
Mac
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build;
Windows
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build;
Windows下編譯Mac和Linux平臺64位可執行程序
Mac
SET CGO_ENABLED=0 // 禁用CGO
SET GOOS=darwin // 目標平臺設定
SET GOARCH=amd64 // 64位系統
go build
Linux
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build
編譯並移動至bin目錄
go install
Go代碼結構
package main //導包 main可執行文件 若是更換其餘的name則不會執行 會生成一個.a文件供其餘程序引入調用 import( // go全部的功能都靠包的引入 "fmt" // 輸出輸出模塊 ) func main(){ //主函數 fmt.Println("hello word") // Println 輸出至終端 }
運行
IDE下
右擊Run
終端下
cd至建立文件路徑下
go run 文件name.go
Go強語言類型
建立函數傳入參數以及返回值必需要指定類型例如
# 補充 聲明的變量若是不使用會被強制刪除
func add(a int, b int // 定義參數類型 ) int //定義返回值類型 { var sum int // 定義變量類型 sum = a + b return sum // 返回值 }
語言特性
1.垃圾回收
a.內存自動回收,不再須要開發人員管理內存
b.開發人員專一業務時間,下降了心智負擔
c.只須要new分配內存,不須要釋放
2.自然併發
a.從語言層面支持併發,很是簡單
b.goroute,輕量級線程,建立成千上萬個goroute成爲可能
c.基於CSP(Commuicating Sequential Process)模型實現
func main(){ go fmt.Println("hello") }
3.channel
a.管道,相似unix/linux中的pipe
b.多個goroute之間經過channel進行通信
c.支持任何類型
func main(){ pip3:=make(chan int,3) // make開闢空間 長度爲3 且只能存int類型 pipe <- 1 pipe <- 2 }
4.多返回值
a.一個函數返回多個值
func calc(a int,b int)(int,int){ //(int,int) 定義返回值 sum:= a+ b avg:= (a+b)/2 return sum,avg }