Golang

编译命令

CGO_ENABLED=0 go build -ldflags="-s -w" -trimpath -o myapp
  • CGO_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

标签: rust, go

添加新评论