go學習之路 --- 起步

junwind發表於2021-02-01

最近開始學習go,邊學邊做一份筆記,幫助自己,幫助他人,如果有寫錯的地方,歡迎大家糾正,感激不盡。

這裡以二進位制包為例

  1. 下載二進位制包 wget https://studygolang.com/dl/golang/go1.15.7.linux-amd64.tar.gz

  2. 將下載的二進位制包解壓至 /usr/local目錄 tar -C /usr/local/ -xzf go1.15.7.linux-amd64.tar.gz

  3. /usr/local/go/bin 目錄新增至PATH環境變數 export PATH=$PATH:/usr/local/go/bin

  4. hello world

     //建立一個hello.go檔案
     package main    //宣告包,每個指令碼中必須包含
     import "fmt"    //下面程式碼中會使用到的包,沒使用到不要import,否則報錯
     func main() {   //主函式,每個程式檔案中必須有,第一個執行的函式(有init則init先執行)
     fmt.Println("hello world")   //使用fmt包中的Println列印,fmt.Println(...) 可以將字串輸出到控制檯,並在最後自動增加換行字元 \n ,使用 fmt.Print("hello, world\n") 可以得到相同的結果
     }
    
     //使用go run執行
     $ go run hello.go 
     hello world
    
     //使用go build來生成二進位制可執行檔案
     go build hello.go
     $ ./hello
     hello world
    
     windows上編譯後,.exe字尾,同樣可以執行,這樣就很容易跨平臺,並且單獨執行一些自動化的任務

可以看到init函式比main函式先執行,因為可以做一些初始化任務
go學習之路 --- 起步

go和php一些不一樣的地方,特此說明

  1. go中,一個大寫開頭的變數,常量,函式等名稱的,比如上面的Println(), 則可以被包外部程式碼所使用,可以看作PHP中的public,比如一個指令碼中呼叫某個類,在類外部,我們只能使用public宣告的方法和屬性;如果是小寫開頭的,則包外部是不可見的,包內部是可見可用的,類似protected

  2. 花括號問題

    func main()  
    {  // 錯誤,不能單獨作為一行(php中是可以的)
     fmt.Println("Hello, World!")
    }

go學習之路 --- 起步

  1. 結束分隔符問題
    go中,一條程式碼語句結束,作為一行,是不需要加結束分隔符的;當然,加了也不會報錯的
    go學習之路 --- 起步
    如果多條程式碼語句在同一行,則必須加分隔符,否則報錯
    go學習之路 --- 起步

  2. 字串拼接符 +
    php中是 . , js和java,go中都是 +
    go學習之路 --- 起步

  3. 空格的使用
    加空格,有些是必須的,有些會更具可讀性

    var age int
    fruit = apples + oranges 
  4. go中字串必須使用雙引號,使用單引號會報錯,這個和php很不一樣,php中都可以使用,php的雙引號可以解析變數; go中並不能

  5. go中變數必須先宣告才能使用,並且變數必須在程式中被使用過,否則編譯報錯
    go學習之路 --- 起步
    可以看到我宣告瞭一個name變數,但是沒有使用過它,編譯時直接報錯,其實和上面fmt包引入後,沒有使用其中的任何元素,會報錯是一個意思;

  6. go中的變數宣告是可以省略資料型別的,宣告時是可以賦初值的,不給初值,系統會預設給一個的,變數的宣告使用後面會講到;

總結:

  • 可以看到go可以很方便的編譯打包成各平臺的,可執行的,程式檔案執行,並且不依賴多餘的執行環境,這樣我們除了寫大型專案,也可以寫一些實用的小指令碼跨平臺執行;
  • 還可以看到go中的程式碼風格是比較嚴謹的,比如變數宣告就必須得使用,這一點可以讓我們很方便的檢測出程式碼中哪些變數沒有被使用到,避免記憶體浪費;當然可能會導致函式返回值多餘問題,這個後面講到;
本作品採用《CC 協議》,轉載必須註明作者和本文連結
六月的風