随笔 - 173,  文章 - 0,  评论 - 0,  阅读 - 10万

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

路由 -> 注入实现入口 -> 业务逻辑 -> 数据汇总

posted on   黑熊一只  阅读(96)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示