【kratos入门实战教程】1-kratos项目搭建和开发环境配置

article/2025/10/5 14:14:16

1、系列目录


  • 【kratos入门实战教程】0-商城项目介绍
  • 【kratos入门实战教程】1-kratos项目搭建和开发环境配置
  • 【kratos入门实战教程】2-实现注册登陆业务

2、概览

经过上一篇的说明,本篇教程正式开始搭建项目。深入解析工程项目的目录结构和介绍一些开发需要使用的工具。如果读者没有阅读过上一篇教程,可以点击这里进行跳转。

3、搭建项目

3.1、安装kratos脚手架

注意:读者需要提前配置好本地的GO环境[version>=1.16]

打开命令行执行命令:

GOPROXY=https://goproxy.io,direct go install github.com/go-kratos/kratos/cmd/kratos/v2@latest && kratos upgrade

成功的结果会看到:

GOPROXY=https://goproxy.io,direct go install github.com/go-kratos/kratos/cmd/kratos/v2@latest && kratos upgrade
go: downloading github.com/go-kratos/kratos/cmd/kratos/v2 v2.0.0-20220714125901-1ab3d8f02840
go install github.com/go-kratos/kratos/cmd/kratos/v2@latest
go install github.com/go-kratos/kratos/cmd/protoc-gen-go-http/v2@latest
go: downloading github.com/go-kratos/kratos/cmd/protoc-gen-go-http/v2 v2.0.0-20220714125901-1ab3d8f02840
go install github.com/go-kratos/kratos/cmd/protoc-gen-go-errors/v2@latest
go: downloading github.com/go-kratos/kratos/cmd/protoc-gen-go-errors/v2 v2.0.0-20220714125901-1ab3d8f02840
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
go: downloading google.golang.org/grpc v1.48.0
go install github.com/google/gnostic/cmd/protoc-gen-openapi@latest

3.2、创建项目

还是在命令行里(win用户可能会吐槽了),进入一个自己的工作目录(随意一个就行),执行创建项目的命令:

kratos new kratos-shop

然后就能看到如下输出:

❯ kratos new kratos-shop
🚀 Creating service kratos-shop, layout repo is https://github.com/go-kratos/kratos-layout.git, please wait a moment.已经是最新的。CREATED kratos-shop/.gitignore (528 bytes)
CREATED kratos-shop/Dockerfile (459 bytes)
CREATED kratos-shop/LICENSE (1066 bytes)
CREATED kratos-shop/Makefile (2399 bytes)
CREATED kratos-shop/README.md (1062 bytes)
CREATED kratos-shop/api/helloworld/v1/error_reason.pb.go (4991 bytes)
CREATED kratos-shop/api/helloworld/v1/error_reason.proto (290 bytes)
CREATED kratos-shop/api/helloworld/v1/greeter.pb.go (8074 bytes)
CREATED kratos-shop/api/helloworld/v1/greeter.proto (679 bytes)
CREATED kratos-shop/api/helloworld/v1/greeter_grpc.pb.go (3560 bytes)
CREATED kratos-shop/api/helloworld/v1/greeter_http.pb.go (2139 bytes)
CREATED kratos-shop/cmd/kratos-shop/main.go (1713 bytes)
CREATED kratos-shop/cmd/kratos-shop/wire.go (589 bytes)
CREATED kratos-shop/cmd/kratos-shop/wire_gen.go (1073 bytes)
CREATED kratos-shop/configs/config.yaml (266 bytes)
CREATED kratos-shop/go.mod (991 bytes)
CREATED kratos-shop/go.sum (18962 bytes)
CREATED kratos-shop/internal/biz/README.md (6 bytes)
CREATED kratos-shop/internal/biz/biz.go (128 bytes)
CREATED kratos-shop/internal/biz/greeter.go (1236 bytes)
CREATED kratos-shop/internal/conf/conf.pb.go (20782 bytes)
CREATED kratos-shop/internal/conf/conf.proto (762 bytes)
CREATED kratos-shop/internal/data/README.md (7 bytes)
CREATED kratos-shop/internal/data/data.go (473 bytes)
CREATED kratos-shop/internal/data/greeter.go (835 bytes)
CREATED kratos-shop/internal/server/grpc.go (828 bytes)
CREATED kratos-shop/internal/server/http.go (832 bytes)
CREATED kratos-shop/internal/server/server.go (150 bytes)
CREATED kratos-shop/internal/service/README.md (10 bytes)
CREATED kratos-shop/internal/service/greeter.go (690 bytes)
CREATED kratos-shop/internal/service/service.go (136 bytes)
CREATED kratos-shop/openapi.yaml (1130 bytes)
CREATED kratos-shop/third_party/README.md (14 bytes)
CREATED kratos-shop/third_party/errors/errors.proto (411 bytes)
CREATED kratos-shop/third_party/google/api/annotations.proto (1051 bytes)
CREATED kratos-shop/third_party/google/api/client.proto (3395 bytes)
CREATED kratos-shop/third_party/google/api/field_behavior.proto (3011 bytes)
CREATED kratos-shop/third_party/google/api/http.proto (15140 bytes)
CREATED kratos-shop/third_party/google/api/httpbody.proto (2671 bytes)
CREATED kratos-shop/third_party/google/protobuf/any.proto (5909 bytes)
CREATED kratos-shop/third_party/google/protobuf/api.proto (7734 bytes)
CREATED kratos-shop/third_party/google/protobuf/compiler/plugin.proto (8754 bytes)
CREATED kratos-shop/third_party/google/protobuf/descriptor.proto (38497 bytes)
CREATED kratos-shop/third_party/google/protobuf/duration.proto (4895 bytes)
CREATED kratos-shop/third_party/google/protobuf/empty.proto (2429 bytes)
CREATED kratos-shop/third_party/google/protobuf/field_mask.proto (8185 bytes)
CREATED kratos-shop/third_party/google/protobuf/source_context.proto (2341 bytes)
CREATED kratos-shop/third_party/google/protobuf/struct.proto (3779 bytes)
CREATED kratos-shop/third_party/google/protobuf/timestamp.proto (6459 bytes)
CREATED kratos-shop/third_party/google/protobuf/type.proto (6126 bytes)
CREATED kratos-shop/third_party/google/protobuf/wrappers.proto (4042 bytes)
CREATED kratos-shop/third_party/openapi/v3/annotations.proto (2196 bytes)
CREATED kratos-shop/third_party/openapi/v3/openapi.proto (22082 bytes)
CREATED kratos-shop/third_party/validate/README.md (81 bytes)
CREATED kratos-shop/third_party/validate/validate.proto (31270 bytes)🍺 Project creation succeeded kratos-shop
💻 Use the following command to start the project 👇:$ cd kratos-shop
$ go generate ./...
$ go build -o ./bin/ ./...
$ ./bin/kratos-shop -conf ./configs🤝 Thanks for using Kratos📚 Tutorial: https://go-kratos.dev/docs/getting-started/start

至此,一个项目就创建完了,是不是很简单?没错!kratos就是这么简单。

4、目录结构解析

使用IDE打开刚刚创建的项目(goland、vscode或者vim),看到项目的整体目录大致如下:

├── api
│   └── helloworld
├── cmd
│   └── kratos-shop
├── configs
├── internal
│   ├── biz
│   ├── conf
│   ├── data
│   ├── server
│   └── service
└── third_party├── errors├── google├── openapi└── validate

目录层级折射出的架构如下图:
在这里插入图片描述
是不是很熟悉?是的,和整洁架构几乎是一样的。kratos-layout的目录架构是参考整洁架构和DDD的设计思想的。

4.1、api

api目录用于存放对外暴露的接口的源文件,包括定义用的protobuf文件和各种插件生成的源码.go文件。kratos的api风格是使用protobuf定义接口以及接口返回的错误,然后使用插件生成相应的代码。

4.2、cmd

cmd目录是应用的main入口目录。例如项目是kratos-shop,那么服务应用的main就在kratos-shop目录下。如果是定时任务应用,那么使用者可以自行添加job目录和main入口,构建的时候会一并构建出来的。

4.3、configs

configs目录是存放应用的静态配置的。kratos的配置默认使用yaml格式,同时也支持json格式。自定义格式的配置可以自行添加解析器,这个特性在后面的教程再张开介绍。

4.4、internal

internal目录是存放业务代码的。整个项目中,这个目录尤其重要,几乎所有的业务逻辑的实现源码都是存在在此目录中。下面再就子目录展开说明:

4.4.1、conf

conf目录定义应用的配置。和api一样,kratos的风格是使用统一的DL语言,即protobuf,定义服务的配置,然后使用protoc以及相关的插件生成go源码,供业务代码读取需要的配置项。

4.4.2、server

server目录是定义应用使用的应用层协议。kratos提供了grpc和http两种。

4.4.3、service

service目录实现了api接口。api的实现(implement)是在service这一层做的。

4.4.4、biz

biz目录是业务逻辑目录。所有的业务逻辑都是在这一层目录实现的。

4.4.5、data

data目录是数据层目录。数据层包含了一切提供数据的外部数据源,包括数据库、缓存甚至下游服务的rpc接口。

4.5、third_party

third_party目录存放一些用到的proto文件。一般开发日常不会动这个目录的。

5、常用工具

如下是常用工具清单:

  • make
  • wire
  • docker && docker-compose

这些工具需要读者自定安装配置好。

6、配置开发环境

项目用到了db、redis和api文档都是通过docker容器在本地跑起的,我们可以使用docker-compose工具,一次性拉起所需要的中间件。如何使用docker和docker-compose不在本系列的教程中,所以这里直接给出docker-compose配置文件和配置常用的make命令。

docker-compose.yaml:

version: "3"services:db:image: mariadbrestart: alwaysports:- "3306:3306"environment:MARIADB_ROOT_PASSWORD: rootMARIADB_DATABASE: testredis:image: redisrestart: alwaysports:- "6379:6379"openapi:ports:- "8080:8080"image: swaggerapi/swagger-uivolumes:- ${PWD}:/dataenvironment:SWAGGER_JSON: /data/openapi.yaml

在Makefile后面追加如下内容:

.PHONY: set-env
set-env:docker-compose -f docker-compose.yaml up -d.PHONY: clean-env
clean-env:docker-compose -f docker-compose.yaml down

http://chatgpt.dhexx.cn/article/EtAxPrBn.shtml

相关文章

go微服务框架Kratos简单使用总结

Kratos是B站开源的一款go的微服务框架,最近PS5上的 战神诸神黄昏比较火,主角就是奎托斯。这个框架的名字就取自他。 在进行框架选型时,对比了目前主流的很多go微服务框架,如Zero,最后对比之下,选择了Krato…

c语言代码后return0表示什么意思,C语言中return 0 表示什么

满意答案 强计划止步不.. 2013.01.03 采纳率:44% 等级:12 已帮助:7948人 return表示函数结束, 也就是说CPU执行到return后, 就会跳转(如果要好理解的话, 是"回到")到调用它的地方, 然后继续执行. 而0, 是一个整型, 一般来说retu…

c语言代码后return0表示什么意思,return 0是什么意思 ?

return 0 代表告诉调用者程序是正常退出的。return是C预定义的语句,它提供了终止函数执行的一种方式。当return语句提供了一个值时,这个值就成为函数的返回值。 这个return语句结束main()函数的执行,把0返还给操作系统。从main()函数返回0表…

接口性能测试方案

一、 性能测试术语解释 1. 响应时间 响应时间即从应用系统发出请求开始,到客户端接收到最后一个字节数据为止所消耗的时间。响应时间按软件的特点再可以细分,如对于一个 C/S 软件(B/S一样)的响应时间可以细分为网络传输时间、应…

软件性能测试方案-性能测试准备

性能测试目的 1、性能调优 开发人员对系统调优后,需要测试人员配合去做性能测试,验证这次优化是否有效果。如果性能指标相比较之前的性能指标更好了,说明系统优化的有效果。反之说明调优不理想 2、新业务、新接口上线 系统从无到上线&…

参考文档一:性能测试---测试方案

性能测试详细测试方案 前言 平台XX项目系统已经成功发布,依据项目的规划,未来势必会出现业务系统中信息大量增长的态势。 随着业务系统在生产状态下日趋稳定、成熟,系统的性能问题也逐步成为了我们关注的焦点:每天大数据量的“…

【性能测试】性能测试方案设计

性能测试方案设计 1. 性能测试流程 系统架构调研 业务模型分析调研 测试需求分析设计测试方案测试环境搭建测试数据准备测试工具开发测试场景设置执行场景测试测试结果分析提交测试报告 2. 性能测试需求分析和范围确定 收集性能需求信息分析应用程序 系统设计和架构信息网…

接口性能测试方案 白皮书 V1.0

一、 性能测试术语解释 1. 响应时间 响应时间即从应用系统发出请求开始,到客户端接收到最后一个字节数据为止所消耗的时间。响应时间按软件的特点再可以细分,如对于一个 C/S 软件的响应时间可以细分为网络传输时间、应用服务器处理时间、数据库服务器处…

性能测试案例

做性能测试之前需要对Linux内核参数优化 Linux内核参数优化 Linux服务器默认支持1024个TCP链接,在性能测试时,无论压力机还是项目服务器,都需要对tcp参数进行一些优化 ulimit -n:查看当前Linux系统最大的连接数 修改Linux系统允许…

性能测试(一)

一)谈谈你对于性能测试的理解: 1)性能测试的概念 测试目的与功能测试的区别性能测试的指标 2)性能测试需要借助工具来进行测试,可以说说自己是用了哪些工具以及如何使用工具来进行性能测试 3)为了避免面试官在性能测试方面进行深究,主动说性能测试难就难…

最全面性能测试方案模板

性能测试方案书 1 简介 1.1目的 编写本文档的目的在于描述测试项目的测试范围,定义测试条件和目标,测试策略和要求,分析可能的风险,提供相应的规避措施或应急对策,并确定测试整体进度的计划和人力资源安排等。 测试目…

性能测试介绍

转载来源 公众号《测试开发技术》 1.性能测试要开专栏了 提起性能测试,可能很多互联网从业人员会感觉比较混淆(不仅仅只是测试人员会弄混淆,很多开发人员、管理人员对性能测试也都是一知半解)。性能测试,它是属于测试…

性能测试流程-性能测试2

性能测试流程 1. 性能测试需求分析 2. 性能测试计划及方案 3. 性能测试用例 4. 搭建测试环境 5. 测试数据准备 6. 测试脚本编写 7. 执行测试脚本 8. 性能测试监控 9. 性能分析和调优 10. 性能测试回归 11. 性能测试报告总结 1、性能测试需求分析 熟悉被测系统 熟…

【测试方案】性能方案设计

什么是性能测试? 压力测试:强调极端暴力 稳定性测试:在一定压力下,长时间运行的情况 基准测试:在特定条件下的性能测试 负载测试:不同负载下的表现 容量测试:最优容量 性能测试方案设计流程 需…

性能测试—性能测试方案设计思路总结

一、需求分析 1.测试目的 为什么测?目的在于测试系统相关性能能否满足业务需求。通常分以下两种情况: 1)新项目上线 2)老项目优化 如果是老项目优化,可考虑是否存有历史测试方案,如果有可以参考&#…

性能测试计划及方案

说明:性能测试实施第一份文档,也是最重要的一份文档。 主要内容: 1、项目背景 项目是用来做什么的 2、测试目标 确定此次性能测试的目标,决定测试策略(下文) 3、人员安排 明确性能测试的时间&#xff0c…

性能测试详细测试方案

性能测试详细测试方案 前言 平台XX项目系统已经成功发布,依据项目的规划,未来势必会出现业务系统中信息大量增长的态势。 随着业务系统在生产状态下日趋稳定、成熟,系统的性能问题也逐步成为了我们关注的焦点:每天大数据量的“…

性能测试设计方案

前言 最近比较多的时间是在做压力测试,也就是常说的压测,而且压力测试也属于性能测试中的其中一个,所以今天总结下性能测试的测试方案。 性能测试分类 常见的性能测试分类一般分为:负载测试、压力测试、稳定性测试 ①负载测试&…

​性能测试基础——性能测试方案(示例)

前面所说的测试分析等准备工作实际上最终目的是制定测试方案,测试方案一般包括: 项目的简要说明、项目系统结构、项目的业务结构、以及项目的性能需求、测试环境数据以及测试策略方法、测试案例、测试人员进度安排以及测试风险预估等等。 下面是一个一般…

性能测试~性能测试方案

1. 背景 1.1. 项目背景 明确该性能测试的项目背景 1.2. 性能目标 性能目标都会影响项目的整个过程,对目标的把握将决定一个性能项目的走向 测试测目标必须明确 取生产峰值流量作为基线(目标一般是峰值的xxx倍)业务的流量预期 2. 测试范围 明确需要测试的特性…