[Go] 環境安裝與設定
前言
本篇用於記錄Go的安裝、環境設定等前置工作。
安裝Go
Mac OSX的話可以直接從Terminal用Homebrew進行安裝:
1 |
|
或是透過官方下載
Go會在系統內預設一個專屬於放置所有Go專案的資料夾
查看相關資訊及設定
查看版本
1 |
|
查看Go語言的環境變數與使用工具的配置等資訊。
1 |
|
執行指令後可以看到許多相關資訊
查看Go工作目錄
go命令仰賴一個重要的環境變數:GOPATH
,為Go的工作目錄,集中管理code, package和執行檔,執行下面的指令可以看到目前go的工作目錄
1 |
|
或是執行以下方法
1 |
|
1 |
|
如果想要在非預設工作區的路徑工作,那麼你需要設定GOPATH
環境變數指向那個目錄
GOPATH 路徑問題
GOROOT
Golang主程式安裝的位置
設置的環境變數
如果是bash
中設置
1 |
|
使修改立刻生效
1 |
|
編譯成二元檔
執行go build
將檔案進compile成二元的執行檔(給機器讀的)
執行為執行檔
如:./main
: 執行名為main 的執行檔
查看編譯後的二進制檔案
指令: ls -l
Packages
為該檔案的標題,同時也表示該檔案的內容摘要,必須寫在第一行。package main
代表這個檔案內容標題為main,這是Go內建的規則,在執行.go
的程式時,一定要執行名稱為main的package,若沒有按照規則,執行程式會出現以下錯誤訊息:
重要觀念:
- Packages: 每個 Go 程式都是由package組成的,為了方便維護,盡量將package名稱和目錄名稱一致
圖片來源
自定義一個package
Go可以自己定義一個package,在主要檔案引入該package時,加入import
該package的資料夾名稱,而自定義的package若要匯出給其他使用,先定義該檔案下的package名稱、函式名稱。
若是自定義的檔案名稱,funtion名稱必須要是大寫。
範例:
若今天要自己定義一個package,在src目錄下建立名為add的資料夾名稱,並在其資料夾底下建立add.go
的檔案,檔案內容如下add.go
1 |
|
main.go
匯入add
1 |
|
- package 有兩種:執行用的package、函式庫的package
比較
函式庫的package
- 不可被編譯,但可被不同專案引入
- package名可以自訂
- function名可以自訂,但必須要大寫
執行用的package
- 用於執行整支程式
- 不可被引入
- 需有名為
main
的package名 - 需有名為
main
的function名
匯入模組
import 套件名稱
fmt
為format縮寫的套件名稱,主要用於調整及顯示內容。也可自訂的package名稱。
Go預設搜尋package是從src目錄底下開始搜尋
import
自定義package時注意的點
- 由於import只能指定資料夾,無法指定檔案
- 同個資料夾底下只能有一個package,如:資料夾底下所有檔案的package名稱都統一是test_package
檔案主要執行的函式
若檔案內的package名稱是main
,則一定要有一個是main
名稱的function
作為執行的函式。
若沒有的話,會出現錯誤訊息:
除了main之外,也可自定義其他funcion,但這些function不會主動執行,而是需要在main function
內進行呼叫。
如下行範例
1 |
|
一次執行同個資料夾下多個.go
檔案
當同個資料夾下有多個.go
檔案時,在其中一個程式裡面呼叫其他檔案所定義的函式可以不需要import
該檔案而直接呼叫,並執行
1 |
|
範例
假設今天名為test的資料夾下分別有一個main.go
及test.go
檔test.go
檔內的程式碼:
1 |
|
main.go
檔內的程式碼:
1 |
|
main.go
檔內的程式碼在不引入test.go
檔的情況下執行go run *.go
時的執行結果:
成功呼叫test.go
檔案裡面的test()
函式。
但是!!!!
如果單獨執行main.go
會出現undefined: test
的錯誤訊息
原因:
go在run
之前會先進行編譯操作,而在此處的編譯它只會以這個main.go
為準,導致其他幾個引用文件中的方法出現找不到的情況(但採用go build
的方式又不一樣,go會自動找引用文件並打包)