@
目錄
- 寫在前面
- 1. 基本編譯
- 2. 交叉編譯
- 3. 最佳化構建
- 4. 使用 Makefile
- 5. 新增版本資訊
- Docker 容器化
- 參考資料
基礎/標準庫/第三方庫
golang 導航
程式設計規範
演算法|面試
專案
寫在前面
- 相關博文
- 個人部落格首頁
- 免責宣告:僅供學習交流使用!開源框架可能存在的風險和相關後果將完全由使用者自行承擔,本人不承擔任何法律責任。
1. 基本編譯
在開發過程中,最基本的編譯命令是 go build。它會在當前目錄生成一個可執行檔案。
go build -o myapp main.go
# 其中,-o myapp 指定了輸出檔案的名稱。
2. 交叉編譯
Go 的編譯器支援交叉編譯,這意味著你可以在一個平臺上為另一個平臺生成可執行檔案。你只需要設定目標作業系統(GOOS)和目標架構(GOARCH)。
- 在 Linux 上為 Windows 編譯:
GOOS=windows GOARCH=amd64 go build -o myapp.exe main.go
- 在 macOS 上為 Linux 編譯:
GOOS=linux GOARCH=amd64 go build -o myapp main.go
3. 最佳化構建
在生產環境中,你可能希望生成更小、更快的可執行檔案。以下是一些常見的最佳化選項:
- 靜態編譯:避免依賴動態庫,減少執行時依賴。
CGO_ENABLED=0 go build -a -installsuffix cgo -o myapp main.go
- 剝離除錯資訊:減小可執行檔案的大小。
go build -ldflags="-s -w" -o myapp main.go
4. 使用 Makefile
Makefile 可以幫助你自動化構建過程,特別是在需要多步構建或複雜構建配置時。
以下是一個示例 Makefile:
# 定義變數
APP_NAME := myapp
SRC := main.go
VERSION := $(shell git describe --tags --always --dirty)
BUILD_DIR := build
# 預設目標
.PHONY: all
all: build
# 編譯
.PHONY: build
build:
@echo "Building $(APP_NAME)..."
GOOS=linux GOARCH=amd64 go build -ldflags="-s -w -X main.version=$(VERSION)" -o $(BUILD_DIR)/$(APP_NAME) $(SRC)
# 清理
.PHONY: clean
clean:
@echo "Cleaning up..."
rm -rf $(BUILD_DIR)
# 執行
.PHONY: run
run: build
@echo "Running $(APP_NAME)..."
./$(BUILD_DIR)/$(APP_NAME)
在這個 Makefile 中:
APP_NAME: 是你的應用名稱。
SRC: 是主原始碼檔案。
VERSION: 使用 Git 標籤來獲取版本資訊。
BUILD_DIR: 是構建輸出目錄。
常見的目標包括:
all: 預設目標,呼叫 build。
build: 編譯應用。
clean: 清理構建輸出。
run: 編譯並執行應用。
5. 新增版本資訊
你可以在編譯時透過 -ldflags 選項將版本資訊嵌入到可執行檔案中。例如:
package main
import (
"fmt"
)
var version string
func main() {
fmt.Printf("Version: %s\n", version)
}
- 使用以下命令編譯時新增版本資訊:
go build -ldflags="-X main.version=$(git describe --tags --always --dirty)" -o myapp main.go
Docker 容器化
為了確保你的應用在任何環境中都能一致執行,使用 Docker 容器化是一個好選擇。以下是一個簡單的 Dockerfile 示例:
# 構建階段
FROM golang:1.18-alpine AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o myapp main.go
# 執行階段
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/myapp .
CMD ["./myapp"]
- 構建 Docker 映象:
docker build -t myapp:latest .
- 執行 Docker 容器:
docker run -it --rm myapp:latest
參考資料
基礎/標準庫/第三方庫
- 地鼠文件:比較多資料
- topgoer
- go awesome
- golang 文件學習
- golang 標準庫
- go 檔案常用操作
golang 導航
- golang 收集
- go-guide
- golang 導航
- go-concurrency-guide
- go-advice
- golang 知識路線
程式設計規範
- golang 程式設計規範
- golang 規範示例
演算法|面試
- cs 面試
- 面試網站
- Golang後端研發崗位相關面試題和簡歷
- 路人張的面試筆記
- golang 演算法
專案
- golang 專案推薦
- 7天系列
- go專案推薦
- go高效能程式設計