提示:
- 所有體系課見專欄:Go 項目開發極速入門實戰課;
- 歡迎加入我的訓練營:云原生AI實戰營,一個助力 Go 開發者在 AI 時代建立技術競爭力的實戰營;
- 本節課最終源碼位于 fastgo 項目的 feature/s01 分支;
- 更詳細的課程版本見:Go 項目開發中級實戰課:10 | 項目初始化(上):如何初始化一個 Go 項目倉庫?
項目開發的第一步便是初始化一個項目目錄,并根據 golang-standards/project-layout 目錄規范,添加必要的目錄及文件。
本節課,來給你介紹下如何初始化一個 Go 項目。
初始化一個 Go 項目,大概分為以下幾步:
- 創建項目目錄;
- 初始化目錄為 Go 模塊;
- 初始化目錄為 Git 倉庫;
- 創建需要的目錄;
- 創建 Hello World 程序。
步驟 1:創建項目目錄
開發 Go 項目的第 1 步便是創建一個項目目錄。現今 Go 模塊管理都是用的 Go Modules。雖然,在使用 Go Modules 的情況下,不再需要設置 GOPATH
環境變量。但是為了提高項目的維護性,這里還是建議將項目放在 GOPATH
目錄下。
初始化項目目錄,操作命令如下:
$ mkdir -p $GOPATH/src/github.com/onexstack/fastgo # 創建項目目錄
$ cd $GOPATH/src/github.com/onexstack/fastgo # 進入到項目目錄中
$ echo "## fastgo 項目" >> README.md # 創建一個 README 文件,作為項目的第一個文件
步驟 2: 初始化目錄為 Go 模塊
Go 項目都需要將目錄初始化為一個 Go 模塊。所以,這里我們需要將 fastgo 目錄初始化為一個 Go 模塊。初始化命令如下:
$ go mod init # 1. 初始化 Go 模塊
$ go work init . # 2. 初始化 Go 工作區(僅限多模塊管理場景),生成 go.work 文件
$ go work use . # 添加當前模塊到 Go 工作區
步驟 3: 初始化目錄為 Git 倉庫
當前 Go 項目基本都是使用 Git 來管理項目源碼的。所以,我們接下來還需要將目錄初始化為一個 Git 倉庫。
初始化為 Git 倉庫的第一步,就是在當前目錄添加一個 .gitignore
文件,里面包含不期望 Git 跟蹤的文件,例如:臨時文件等。你可以使用生成工具 gitignore.io 來生成 .gitignore
:
# 備份文件
*.bak
*~# Go 工作區文件。Go 項目開發中,不建議將 Go 工作區文件提交到代碼倉庫
go.work
go.work.sum# 日志文件
*.log# 自定義文件
/_output
可以執行以下命令將 Go 項目倉庫初始化為一個 Git 倉庫:
$ git init # 初始化當前目錄為 Git 倉庫
$ git config user.name 孔令飛 # 設置倉庫級別用戶名
$ git config user.email colin404@foxmail.com # 設置倉庫級別郵箱
$ git config --global credential.helper store # 永久保存憑據
$ git add . # 添加所有被 Git 追蹤的文件到暫存區
$ git remote add origin https://github.com/onexstack/miniblog # 將本地倉庫與遠程倉庫相關聯
$ git commit -m "feat: 第一次提交" # 將暫存區內容添加到本地倉庫中
之后,我們就可以在該目錄下開發代碼,并根據需要提交代碼。提交后的源碼目錄內容如下:
$ ls -A
.git .gitignore go.mod go.work README.md
步驟 4: 創建需要的目錄
執行以下命令預創建需要的目錄:
$ mkdir -p cmd configs docs scripts
$ ls -F
cmd/ configs/ docs/ go.mod go.work README.md scripts/
提前創建一些符合目錄規范的空目錄可以起到一下 2 個作用:
- 提前規劃目錄相當于提前規劃未來的功能,將未來要實現的功能以目錄的形式固化在項目倉庫中,起到記錄的作用;
- 提前創建目錄有利于后續文件按照功能存放在預先規劃好的目錄中,從而使項目更加規范。否則,不同開發者可能會根據各自的開發習慣,創建各種各樣的目錄結構和目錄名稱。
因為 Git 默認不會追蹤空目錄,所以需要再空目錄下創建 .keep 文件,創建命令如下:
$ touch configs/.keep docs/.keep scripts/.keep cmd/.keep
步驟 5: 創建 Hello World 程序
創建 cmd/fg-apiserver/ 目錄(fg 是 fastgo 的簡寫):
$ mkdir -p cmd/fg-apiserver
新建 cmd/fg-apiserver/main.go,內容如下:
package mainimport "fmt"// Go 程序的默認入口函數。閱讀項目代碼的入口函數.
func main() {fmt.Println("Hello World!")
}
編譯并運行,命令如下:
$ gofmt -s -w ./ # 格式化 Go 源碼
$ go build -o _output/fg-apiserver -v cmd/fg-apiserver/main.go # 編譯 fg-apiserver 組件源碼
$ ls _output/ # _output 為二進制文件保存目錄
fg-apiserver
$ _output/fg-apiserver # 啟動 fg-apiserver 組件
Hello World!