Golang和Rust常见编译命令速记
Golang
编译命令
CGO_ENABLED=0 go build -ldflags="-s -w" -trimpath -o myappCGO_ENABLED=0:纯静态二进制,避免动态库依赖-s:strip symbol table 去除符号表-w:strip DWARF debug info 去除调试信息-trimpath:去除路径信息
Rust
musl静态编译命令
cargo build --target x86_64-unknown-linux-musl --release首次编译,需要安装musl
rustup target add x86_64-unknown-linux-musl编辑Cargo.toml文件,剥离调试和符号信息,类似Golang的-s -w
[profile.release]
strip = "symbols"编辑.cargo/config.toml文件,移除路径信息
[build]
rustflags = [
"--remap-path-prefix",
"--remap-path-prefix-from=${CARGO_MANIFEST_DIR}",
"--remap-path-prefix-to=."
]推荐的 Go 项目结构(基于 Go Modules)
my-project/ # 项目根目录(包含 go.mod)
├── go.mod # Go 模块声明(必需)
├── go.sum # 依赖校验和(自动生成)
├── README.md
├── Makefile # (可选)构建/测试脚本
├── .gitignore
├── .golangci.yml # (可选)golangci-lint 配置
├── cmd/ # 入口点(main 函数所在)
│ └── server/ # 每个可执行程序一个子目录
│ └── main.go # package main,调用 internal/app
├── internal/ # 私有代码(不能被外部项目 import)
│ ├── app/ # 应用核心逻辑(业务层)
│ │ └── server.go
│ ├── config/ # 配置加载
│ ├── handler/ # HTTP/gRPC 处理器
│ ├── service/ # 业务服务(如 UserService)
│ ├── repository/ # 数据访问层(DB、缓存等)
│ └── middleware/ # 中间件
├── pkg/ # 可公开复用的库(可被其他项目 import)
│ └── utils/ # 通用工具(如字符串处理、时间格式等)
├── api/ # OpenAPI/Swagger 定义、gRPC .proto 文件
│ └── v1/
│ └── api.swagger.json
├── scripts/ # 部署、数据库迁移等脚本
│ └── migrate.sh
├── test/ # 端到端测试、集成测试(非 *_test.go)
│ └── e2e_test.go
├── deployments/ # Dockerfile、K8s 配置等
│ ├── Dockerfile
│ └── k8s/
└── docs/ # 项目文档最小可行结构(小型项目)
my-simple-app/
├── go.mod
├── main.go # 包含 handler + 业务逻辑(仅限 demo)
├── handler/
│ └── user.go
└── README.md