天天看點

Go:分布式學習利器(1) -- 開發環境搭建 + 運作第一個go程式

文章目錄

  • ​​為什麼要學習 go​​
  • ​​開發環境搭建 -- MAC​​
  • ​​運作第一個go程式​​
  • ​​go 函數的傳回值設定​​
  • ​​go 函數的指令行參數​​

為什麼要學習 go

在如下幾個應用場景的需求下産生了go:

  • 超大規模分布式計算叢集
  • 多核硬體的架構
  • web模式下的大規模開發和頻繁的進度更新

是以go 語言有如下幾個特點:

  • 簡單。 隻有25個關鍵字,相比于C的37個,C++的84個已經是很簡單了
  • 高效。編譯型語言,也支援垃圾回收,同時支援指針直接通路記憶體。
  • 雲計算語言。docker 和 kubernate 都是通過go語言開發的
  • 區塊鍊語言。

對于存儲領域來說,go語言已經實作了很多大規模的高性能和高并發架構,能夠快速高效得完成一個存儲元件的開發。而且最近想要學習MIT 6.824課程過程中的一些很有趣的lab需要使用go來完成,這個過程的學習和提升就很有趣了。

開發環境搭建 – MAC

  1. 建立本地目并設定環境變量

    在home目錄下建立go目錄,go/src目錄,go/pkg/mod目錄,分别作為go path目錄,源代碼目錄,依賴子產品目錄

  2. Go:分布式學習利器(1) -- 開發環境搭建 + 運作第一個go程式
  3. 修改~/.bash_profile檔案,增加如下内容:

    ​export GOPATH="$HOME/go"​

    ​​

    ​export PATH="$PATH:$GOPATH/bin"​

    ​如果在unix,則預設是​

    ​$HOME/go​

    ​;如果是windows ,則預設是​

    ​%USERPROFILE%go​

  4. 安裝go

    ​brew install go​

    ​ // 會直接安裝go 的最新版本 1.14

    安裝完成之後 通過​

    ​go version​

    ​檢視
  5. 安裝golangci-lint

    ​brew install golangci/tap/golangci-lint​

    ​ golangci-lint作為代碼靜态檢查工具,後續開發過程中可以使用make lint(makefile中添加)預先檢查代碼中不符合go編碼規範的地方,否則流水線禁止送出,可以提前做到代碼風格的一緻性和可讀性
  6. 開發工具安裝

    這裡看個人習慣:vscode , goland都是可以的

    mac 下的工具安裝:

    ​brew cask install goland​

運作第一個go程式

  1. 之前建立好的源碼路徑 ​

    ​$GOPATH/src​

    ​目錄下建立一個ch1目錄,再在該​

    ​ch1​

    ​目錄下建立一個以​

    ​hellow_world.go​

    ​命名的go檔案
  2. ​hello_world.go​

    ​檔案中輸入如下代碼
package main // 表明代碼所在的子產品包,這個是必須聲明的

import "fmt" // 引入代碼依賴

//實作功能
func main() {
  fmt.Println("Hello World")
}      
  1. 運作 ​

    ​go run hello_world.go​

  2. 也可以編譯生成二進制檔案 ​

    ​go build hello_world.go​

    ​ 生成的二進制檔案 運作所依賴的庫已經連結好了,這個時候随意移動二進制檔案都是可以運作的。

go 函數的傳回值設定

不同與 java/C/C++ 的 ​

​return​

​​方式的傳回值,go語言裡需要設定

​​

​os.Exit(code int)​

​ 即如下代碼

package main // 表明代碼所在的子產品包,這個是必須聲明的

import (
  "fmt" // 引入代碼依賴
  "os" //引入os 的代碼依賴
)

//實作功能
func main() {
  fmt.Println("Hello World")
  os.Exit(0) // 設定傳回值
}      

go 函數的指令行參數

不同于C/C++/Java的指令行參數傳入 直接通過 main 的參數​

​char *args[]​

​來儲存,go 不同的是需要通過相關的依賴來進行傳入。

  • ​main​

    ​​函數不支援入參

    ​​

    ​func main (arg [] string)​

  • 程式中直接通過 ​

    ​os.Args​

    ​ 擷取指令行參數
package main

import (
  "fmt"
  "os"
)

func main() {
  fmt.Println("command args: ", os.Args)

  if len(os.Args) > 1 { // len是數組求長度的函數
    fmt.Println("Hellow world ", os.Args[1])
  }
}      

運作輸出如下:

Go:分布式學習利器(1) -- 開發環境搭建 + 運作第一個go程式