本项目是一个基于 Gin 框架的 Go Web 应用,采用分层架构设计。
dwz-server/ ├── main.go # 程序入口 ├── go.mod # Go模块定义 ├── go.sum # 依赖版本锁定 ├── README.md # 项目说明文档 ├── .gitignore # Git忽略文件 ├── .gitlab-ci.yml # CI/CD配置 ├── .goreleaser.yaml # 发布配置 ├── config.yaml.example # 配置文件示例 ├── cmd/ # 命令行入口 │ └── run.go ├── app/ # 应用核心代码 │ ├── controller/ # 控制器层(处理HTTP请求) │ ├── service/ # 服务层(业务逻辑) │ ├── dao/ # 数据访问层 │ ├── model/ # 数据模型 │ ├── dto/ # 数据传输对象 │ └── middleware/ # 中间件 ├── router/ # 路由配置 ├── config/ # 配置管理 ├── support/ # 基础支持服务 │ ├── db/ # 数据库连接 │ └── logger/ # 日志配置 ├── util/ # 工具函数 └── web/ # 静态资源
HTTP请求 -> Controller -> Service -> DAO -> Database ↓ DTO/Model
const (
ErrCodeSuccess = 0 // 成功
ErrCodeBadRequest = 400 // 请求参数错误
ErrCodeUnauthorized = 401 // 未授权
ErrCodeForbidden = 403 // 禁止访问
ErrCodeNotFound = 404 // 资源不存在
ErrCodeInternal = 500 // 内部服务器错误
)
type Response struct {
Code int `json:"code"`
Message string `json:"message"`
Data interface{} `json:"data,omitempty"`
}
type User struct {
ID uint `gorm:"primaryKey" json:"id"`
Username string `gorm:"uniqueIndex;size:50" json:"username"`
Password string `gorm:"size:100" json:"-"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
}
/api/v1/users # 用户列表 /api/v1/users/{id} # 特定用户 /api/v1/users/{id}/posts # 用户的文章
logger.Info("用户登录成功",
zap.String("username", username),
zap.String("ip", clientIP),
zap.Duration("duration", duration),
)
server:
port: 8080
mode: release
database:
host: localhost
port: 3306
username: root
password: password
database: dwz
redis:
host: localhost
port: 6379
password: ""
db: 0
_test.go 结尾Test 开头type(scope): subject body footer
类型:
# 本地构建
go build -o dwz-server main.go
# 跨平台构建
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o dwz-server main.go
FROM golang:1.23.2-alpine AS builder WORKDIR /app COPY . . RUN go mod download RUN CGO_ENABLED=0 GOOS=linux go build -o dwz-server main.go FROM alpine:latest RUN apk --no-cache add ca-certificates WORKDIR /root/ COPY --from=builder /app/dwz-server . CMD ["./dwz-server"]