Go - 第五章 | 建立 Go 模塊
前言
翻譯真的很難,程式語言反而覺得不難⋯⋯
發現官方文件直接翻譯,對於我來說太多會翻譯不好的地方。
註:原文連結
簡要
這是教的學的地一部分介紹了Go
基礎的函數。如果你剛開始學Go
,請確保你已經看完了Go
入門教學,其中介紹了go
指令、go
模塊和簡單的go
程式碼。
在這個教學中,你會建立兩個模塊。第一個是從其他的庫或是應用程式導入。第二個是呼叫於第一個。
這個教學順序包括了六個簡單的主題分別說明了語言不同的部分。
- 建立一個模塊-編寫一個包含可以從另一個模塊調用的功能的小模塊。
- 從另一個模塊調用你的代碼-導入並使用新模塊。
- 返回並處理錯誤-添加簡單的錯誤處理。
- 返回隨機問候語-處理切片中的資料(
Go
的動態大小的數組)。 - 返回多人的問候語 -在地圖中存儲鍵/值對。
- 添加測試-使用
Go
的內置單元測試功能來測試你的代碼。 - 編譯並安裝應用程序-在本地編譯並安裝代碼。
先決條件
- 有一編寫程式的經驗. 這邊的程式碼非常的簡單,但是他會幫助你了解有關於
functions
,loops
,arrays
。 - 編輯程式碼的工具. 可以使用任何的文字編輯器。大多數的編輯器基本上都支援
Go
。比較受歡迎的編輯器為VSCode(free)
、GoLand(paid)
、Vim(free)
。 - 命令提示字元(終端機).
Go
可以運行在Linux
、Mac
的PowerShell
或Windows
的cmd
,於任何終端上。
啟動其他人可以使用的模塊
開始建立Go
模塊。在模塊中收集一到多個相關的包用於一組離散且有用的函數。例如,你可以使用包含用於財務分析的函數的包來建立一個模塊,其他編寫財務應用程式的人可以使用你的函數。
Go
程式碼分組在包,而包分組在模塊。包的模塊指定了Go
運行代碼所需要的上下文,包括編寫代碼的Go
版本及其所需的其他模塊集。
在你新增或是更新你的模塊,你會發布新的版本。開發者在模塊中使用的方法,可以導入更新版本,並在推上正式環境前做測試。
- 開啟命令提示字元並且
CD
到主目錄Linux
或Mac
1
cd
Windows
1
cd %HOMEPATH%
- 建立一個
greetings
原始碼的目錄- 範例
1
2mkdir greetings
cd greetings
- 範例
- 使用
go mod init
指令來建立go.mod
檔- 執行
go mod init
指令,為其提供代碼所在模塊的路徑。這裡使用example.com/greetings
為模塊的路徑,在正式環境下,這是個可以下載的url
1
2$ go mod init example.com/greetings
go: creating new go.mod: module example.com/greetings - 使用
go mod init
指令建立go.mod
將你的程式碼標識為可以從其他代碼中使用的模塊。該檔案目前只有包含你的模塊名稱和所使用的Go
版本。但是當你新增依賴(意旨:使用其他的函數模塊),那go.mod
檔內容將會有使用的模塊版本清單。這樣可以使構建具有可複制性,並使你可以直接控制要使用的模塊版本。
- 執行
- 在你的文字編輯器裡面建立一個
greetings.go
的檔案,並在裡面寫程式碼。 - 將以下的程式碼複製貼上到
greetings.go
裡面,並且儲存。- 程式碼
1
2
3
4
5
6
7
8
9
10package greetings
import "fmt"
// Hello returns a greeting for the named person.
func Hello(name string) string {
// Return a greeting that embeds the name in a message.
message := fmt.Sprintf("Hi, %v. Welcome!", name)
return message
}- 這是你第一個模塊的程式碼,這函數返回問候來訪問他的人。下一步你將會寫調用這方法的程式碼
- 在這個程式碼,你:
- 宣告一個
greetings
包以收集相關函數。 - 實作一個
hello
函數回傳問候。- 這個方法需要一個
name
的參數其型態為string
和定義回傳的型態是string
。在Go
,名稱由大寫字母開頭的函數可以由不在同包中的函數調用。
- 這個方法需要一個
- 宣告一個
message
變量用於儲存你的問候。- 在
Go
,:=
運算符是在一行中聲明和初始化變量的快捷方式(Go
使用右側的值確定變量的類型)。從長遠來看,你可能這樣寫:1
2var message string
message = fmt.Sprintf("Hi, %v. Welcome!", name)
- 在
- 使用
fmt
包的Sprintf
函數建立問候消息。Sprintf
將name
參數的值替換為%v
格式動詞。插入name
參數的值將完成問候語。 - 將格式化的問候語文本返回給呼叫者。
- 宣告一個
- 程式碼
過程
這邊簡單示範一下上述官方的教學。
註:這邊的路徑使用的是本地某個暫存資料夾做示範。
單字/句子
以下單字,有的其實都看得懂,純粹就是想要加強紀錄、練習發音、翻譯意思。
單字/句子 | 翻譯 |
---|---|
fundamental | 基本的 |
features | 特徵 |
intended | 意向的 |
brief | 簡要 |
illustrate | 說明 |
slices | 切片 |
dynamically-sized | 動態大小 |
multiple | 多 |
pairs | 對 |
locally | 本地的 |
prompt | 提示 |
identifies | 確定 |
reproducible | 可複制的 |
direct | 直接 |
capital letter | 大寫字母 |
operator | 算子 |
shortcut | 捷徑 |
initializing | 初始化 |
variable | 變量 |
determine | 確定 |
substitutes | 替代品 |
Inserting | 插入 |
結語
這邊的重點我著重放在go.mod
,主要是理解module
和package
的關係。自己動手做了之後,可以初步了解其關係和層級;另外還有在建置一個新的專案的時候,透過go mod init
來產生go.mod
檔。
註:以上參考了
Golang Documentation