01 開發環境與語言簡介

寫 Go 建議用 Git 當 source control. 基本上,Go 相關的套件,絕大部分放在 Github 上。

資源:

  1. 官網:https://golang.org/
  2. 線上學習:A tour of Go。請務必要上網練習,玩過一輪後,差不多就學完最基本的語法,再撘配 The Go Programming Language 書,效果會比較好。
  3. Effective Go: Go 上手後,一定要看。

Books:

  1. The Go Programming Language ~中文版~
  2. Go Web Programming
  3. Go System Programming

第一本看完就差不多了;第二本主要是講 Web,包含 DB, 版型;第三本主要是討論跟作業系統互動,對 routine, channel 有比較深入的說明。

環境設定

  1. 下載 golang。~下載連結~
  2. 設定環境變數 $GOPATH: $GOPATH 是專門放 Go 開發專案的目錄,所有 Go 相關的工具,也會一併裝在這個目錄。

IDE 建議

建議用 Visual Studio Code,再安裝相關的 plugin。

  1. Go plugin: https://github.com/Microsoft/vscode-go

    go for vscode

  2. Code Runner: https://github.com/formulahendry/vscode-code-runner

    code runner

GOPATH 目錄說明

.
├── bin
├── pkg
└── src
  • bin: 主要放 Go 相關的工具程式,及專案的執行檔
  • pkg: 編譯過程會產生的中間檔
  • src: 放 source code.

Soruce code 放法

  1. 在 src 下,每個專案自己開一個目錄。自己有各自的 git repo。
  2. 專案的主目錄下,每個 package 開一個目錄。
  3. 一個目錄只能有一個 package 及測試的 package。package 名稱建議要與目錄名稱相同;如此比較好維護程式碼,想找某個 package 時,只要去找相對應的目錄即可。

語言特性

編譯式語言

  • 與 PHP 直譯式不同,程式碼需要經過編譯成執行檔,才可以用。
  • 與 Java 不同,直接編譯成 os 平台的 machine code。

Strong Type

變數宣告後,它的資料型別也就固定,不能更改。不像 PHP 可以隨意更改變數的資料型別。

可在不同平台執行

與 Java 不同,需要重新 compile 成相對應的平台。

有 Garbage Collection

與 Java 類似,有 GC,可以不用自己管理記憶體,但也要注意,免得浪費記憶體還不知道。

沒有 OO (Object Oriented)

程式撰寫的觀念與 C 類似,有 pointer,但沒有物件導向NotOOP

NotOOP. OOP 有三個基本特性: 封裝,繼承,多型。而 Go 只有封裝。因此我覺得 Go 不算是 OO 的語言。

有 package 管理

因此也會有變數 visible,如 public, private.

Summary

  • 寫 Go 與寫 C 類似,但有 GC,可以省去記憶體管理工作.
  • 因為沒有 OO,只有封裝,沒有繼承等功能
  • 沒有泛型 (Generic) 所以有關型別方面的寫作,就沒這個彈性。
  • 有工具會自動校正 coding style.
  • 檔案的編碼,一定要是 UTF-8
  • Function paramenter pass by value (call by value)

Hello World

  1. 在 src 下開一個目錄
  2. 產生一個檔案 main.go 內容如下:

     package main
    
     import "fmt"
    
     func main() {
         fmt.Println("Hello, 世界")
     }
    
  3. 在目錄下,可執行 go run main.go,可以看到結果。
  4. 在目錄下,可執行 go build,編繹成執行檔。

說明

  1. 寫執行檔的程式,檔名不一定要命名成 main.go,但程式碼的 package 宣告一定要是 main
  2. 經過 build 之後,產生的執行檔名,會是目錄的名稱。
  3. 可以使用 go run main.go 直接執行程式,如果程式是拆分成多個 .go 的檔案,則需要將每個檔名也加入。eg: go run main.go a.go b.go
  4. import 是將會用到的 package 加入,跟 Java 一樣,有用到的 package 用 import 加入。Go 的工具,會幫忙找內建的 package ,自動加入到程式碼中,很方便;但如果是第三方的套件,就要自己寫。第三方套件 import 路徑,是從 $GOPATH/src 以下。eg: 程式放在 $GOPATH/src/a/b/c 則 import 路徑是 import "a/b/c"
  5. 程式的進入點 (Entry point): func main(),跟大多數的程式語言一樣,寫執行檔都會需要有一個主函式 main

Arguemnts

重覆上述的動作,sample code 如下:

package main

import (
    "fmt"
    "os"
)

func main() {
    if len(os.Args) > 1 {
        fmt.Println("hi, ", os.Args[1])
    }
    fmt.Println("hello world")
}

利用 os.Args 來接 command line 傳進來的參數。os.Args[0] 是執行檔的完整檔名,所以傳入的參數值要從 os.Args[1] 開始。Golang 有內建 flag 套件來管理參數,但如果要寫較複雜的 command line 程式,建議用 spf13/cobra

results matching ""

    No results matching ""