Ubuntu下Golang打包后測試的核心流程
在Ubuntu系統上,首先需要安裝Golang并配置基礎環境。通過以下命令安裝最新版Golang:
sudo apt update && sudo apt install golang-go
安裝完成后,驗證安裝是否成功:
go version
若輸出Go的版本信息(如go version go1.21.0 linux/amd64
),則說明環境配置完成。
進入項目目錄(包含main.go
或打包入口文件),使用go build
命令生成可執行文件。例如:
go build -o myapp main.go
若需要跨平臺打包(如在Ubuntu上為Windows生成可執行文件),可通過設置GOOS
和GOARCH
環境變量實現:
GOOS=windows GOARCH=amd64 go build -o myapp.exe main.go
生成的myapp
(或myapp.exe
)即為打包后的可執行文件。
直接在終端執行生成的可執行文件,驗證基礎功能是否符合預期:
./myapp
若程序需要命令行參數(如--config=config.yaml
),需一并提供:
./myapp --config=config.yaml
觀察終端輸出,確認程序是否正常啟動、執行邏輯是否正確。
若項目包含測試文件(以_test.go
結尾,如main_test.go
),可使用go test
命令運行單元測試。測試文件需與被測代碼在同一包中,測試函數以Test
開頭并接收*testing.T
參數。例如:
// main_test.go
package main
import "testing"
func TestAdd(t *testing.T) {
result := Add(2, 3) // 假設Add是main.go中的函數
if result != 5 {
t.Errorf("Add(2, 3) = %d; want 5", result)
}
}
運行測試:
go test
若測試通過,將輸出PASS
;若失敗,會顯示具體的錯誤信息(如期望值與實際值的差異)。如需查看測試覆蓋率(評估測試完整性),可添加-coverprofile
參數:
go test -coverprofile=coverage.out
go tool cover -html=coverage.out # 生成HTML格式的覆蓋率報告
覆蓋率報告會標記哪些代碼被測試覆蓋,幫助定位未測試的邏輯。
若打包后的可執行文件需要在其他環境(如測試服務器、生產環境)運行,需將其復制到目標環境并執行。例如,將myapp
復制到遠程服務器:
scp myapp user@remote-server:/path/to/deploy
登錄遠程服務器后,賦予執行權限并運行:
chmod +x /path/to/deploy/myapp
/path/to/deploy/myapp
檢查程序是否能在目標環境中正常工作,確保打包過程沒有遺漏依賴(如靜態鏈接時需設置CGO_ENABLED=0
)。
對于涉及數據庫、網絡等外部依賴的代碼,可使用dockertest
等庫進行集成測試。例如,測試與MySQL數據庫的交互:
// integration_test.go
package mypkg_test
import (
"context"
"testing"
"github.com/ory/dockertest/v3"
)
func TestDBConnection(t *testing.T) {
// 創建MySQL容器
pool, err := dockertest.NewPool("")
if err != nil {
t.Fatal(err)
}
resource, err := pool.RunWithOptions(&dockertest.RunOptions{
Repository: "mysql",
Tag: "8.0",
Env: []string{"MYSQL_ROOT_PASSWORD=123456"},
}, nil)
if err != nil {
t.Fatal(err)
}
defer resource.Close()
// 測試數據庫連接邏輯(如連接池、查詢)
// ...
}
集成測試需在測試環境中運行,確保代碼與外部依賴的交互符合預期。