1. 安装
1.1 环境准备
go
proto
protoc-gen-go
环境变量:
通过 go env查看相关变量设置是否正常,比如mod是否开启,goproxy是否设置为国内代理。
go env -w GOPROXY=""
#涉及扩展软件 - mac版
# brew包管理器安装
brew install protobuf
brew install protoc-gen-go
brwe install protoc-gen-go-grpc
brew install xorgproto
# go安装github包
go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@v2.2.0
# 需要下载包
git clone git@github.com:go-swagger/go-swagger.git
go install ./cmd/swagger
#opentelemetry(trace安装)
# 主要参考官网链接
# https://opentelemetry.io/docs/collector/getting-started/#local
# 以下为示例
git clone https://github.com/open-telemetry/opentelemetry-collector.git
cd opentelemetry-collector
make install-tools
make otelcorecol
./bin/otelcorecol_* --config ./examples/local/otel-config.yaml
#In a second terminal window, you can test the newly built collector by doing the following:
git clone https://github.com/open-telemetry/opentelemetry-collector-contrib.git
cd opentelemetry-collector-contrib/examples/demo/server
go build -o main main.go; ./main & pid1="$!"
cd ../client
go build -o main main.go; ./main
1.2 cli工具
创建新app
kratos new app/user
app/user如字面,为目录层级,最终创建一个名为user的app。
运行app
kratos run
终端支持名字最左匹配查询当前框架下的app名字,然后按enter键即可run起来。
按照go运行逻辑,则在new app之后,在app目录的cmd,进行go run 或者 go build .
示例如下
cd /myServer/app/john/johnhoume/cmd/johnhome
go run main.go
or
go build . & ./main
共用mod
在新建app的进行命令参数指定
kratos new app/user --nomod
生成proto
//新增
kratos proto add api/user/v1/demo.proto
//生成cli proto
kratos proto client api/user/v1/demo_c.proto
//生成server proto
kratos proto server api/user/v1/demo_s.proto -t rand_dir/name
1.3 app生成流程
正式安装流程
#具体参考项目 README.md
# 第一步 Create a template project
kratos new app/zsuper/zsuperwork
# 第二步 cd到项目根目录,将proto生成在根目录级别中的api里面,同时将client和server代码进行生成
cd ./api
# Add a proto template
kratos proto add api/zsuper/zsuperwork/v1/zsuperwork.proto
# 第三步 app生成构建结束后 cd到app具体目录
# 比如: cd app/具体路径
# 进行make命令执行 具体查看Makefile看相关入参的内容
make api # 可以参考这个
1.4 example
https://github.com/go-kratos/examples
相关插件、middle均可参考这个示例。
1.5 目录
.
├── Dockerfile
├── LICENSE
├── Makefile
├── README.md
├── api // 下面维护了微服务使用的proto文件以及根据它们所生成的go文件
│ └── helloworld
│ └── v1
│ ├── error_reason.pb.go
│ ├── error_reason.proto
│ ├── error_reason.swagger.json
│ ├── greeter.pb.go
│ ├── greeter.proto
│ ├── greeter.swagger.json
│ ├── greeter_grpc.pb.go
│ └── greeter_http.pb.go
├── cmd // 整个项目启动的入口文件
│ └── server
│ ├── main.go
│ ├── wire.go // 我们使用wire来维护依赖注入
│ └── wire_gen.go
├── configs // 这里通常维护一些本地调试用的样例配置文件
│ └── config.yaml
├── generate.go
├── go.mod
├── go.sum
├── internal // 该服务所有不对外暴露的代码,通常的业务逻辑都在这下面,使用internal避免错误引用
│ ├── biz // 业务逻辑的组装层,类似 DDD 的 domain 层,data 类似 DDD 的 repo,而 repo 接口在这里定义,使用依赖倒置的原则。
│ │ ├── README.md
│ │ ├── biz.go
│ │ └── greeter.go
│ ├── conf // 内部使用的config的结构定义,使用proto格式生成
│ │ ├── conf.pb.go
│ │ └── conf.proto
│ ├── data // 业务数据访问,包含 cache、db 等封装,实现了 biz 的 repo 接口。我们可能会把 data 与 dao 混淆在一起,data 偏重业务的含义,它所要做的是将领域对象重新拿出来,我们去掉了 DDD 的 infra层。
│ │ ├── README.md
│ │ ├── data.go
│ │ └── greeter.go
│ ├── server // http和grpc实例的创建和配置
│ │ ├── grpc.go
│ │ ├── http.go
│ │ └── server.go
│ └── service // 实现了 api 定义的服务层,类似 DDD 的 application 层,处理 DTO 到 biz 领域实体的转换(DTO -> DO),同时协同各类 biz 交互,但是不应处理复杂逻辑
│ ├── README.md
│ ├── greeter.go
│ └── service.go
└── third_party // api 依赖的第三方proto
├── README.md
├── google
│ └── api
│ ├── annotations.proto
│ ├── http.proto
│ └── httpbody.proto
└── validate
├── README.md
└── validate.proto
调用逻辑
api作为路由层,提供http、grpc入口(其中http入口,通过gateway模式,转发到grpc进行处理)。
wire注入
将service进行加载注入到api调用,负责接口实现。
业务代码链路
api -> service -> biz -> data
路由 -> 注入实现入口 -> 业务逻辑 -> 数据汇总
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南