# go-micro-demo **Repository Path**: yangdaqiong/go-micro-demo ## Basic Information - **Project Name**: go-micro-demo - **Description**: go micro项目 - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2021-10-26 - **Last Updated**: 2021-10-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # go-micro-demo #### 介绍 go micro项目 学习教程:http://www.topgoer.com/ #### 软件架构 go-micro,gin,gorm构成的微服务项目 1.api-service接收外部http请求,gin做路由对请求进行分发。 2.product-service是业务实现,做为RPC服务端供api-service调用。数据层使用gorm #### 开发规范及功能点 1.gin继承和路由支持。由于gin主要做为路由使用,非特殊情况不建议使用重度的框架 2.参数验证,增加自定义异常信息标签errmsg,简化参数异常校验,此信息会返回给客户端。比较复杂的验证可以在业务中判断。 ``` type Product struct { ProdId int32 `form:"prodId" json:"prodId"` ProdName string `form:"prodName" json:"prodName" binding:"required,gte=4,lte=32" errmsg:"prodName参数不合法"` } ``` 3.http响应封装 ``` ctrl.ResponseSuccess(ctx) //返回成功{"code":200,"message":"操作成功"} ctrl.ResponseFailed(ctx, 4000, "prodId参数不能为空") //返回异常,自定义错误信息 ctrl.ResponseData(ctx, prodResp.Data) //返回正常对象:{"code":200,"message":"操作成功","data":""} ctrl.Response(ctx, prodResp.Code, prodResp.Data) //返回自定义状态码和数据对象 ``` 4.grpc错误码封装,将其返回给调用方,明确下游服务异常信息,同时返回给客户端 ``` resp.Code = s.FailedMessage(5001, "查询商品列表失败", err.Error()) ``` 5.gorm支持,读写分离支持 ``` type DBManager struct { master *gorm.DB //主库 slave *gorm.DB //从库,读库 //....可扩展多实例 } //调用 datasource.GetDB().Find() datasource.GetDBSlave().Find() ``` 6.grpc客户端管理,服务启动时统一注册 ``` //统一注册grpc client ... middleware.RegisterServiceClient() //调用时 ... prodRpcClient := middleware.GetProductRpcClient() prodResp, _ := prodRpcClient.UpdateProduct(context.Background(), &prodReq) ``` #### 安装教程 1. 安装go 2. 安装go-micro 3. 安装protobuf生成工具protoc 环境变量设置: 1. PATH:;D:\projects\protoc\bin;D:\gopath\bin 2. GOPATH:D:\gopath ``` go env $ go env set GO111MODULE=on set GOARCH=amd64 set GOBIN= set GOCACHE=C:\Users\admin\AppData\Local\go-build set GOENV=C:\Users\admin\AppData\Roaming\go\env set GOEXE=.exe set GOFLAGS= set GOHOSTARCH=amd64 set GOHOSTOS=windows set GONOPROXY= set GONOSUMDB= set GOOS=windows set GOPATH=D:\gopath set GOPRIVATE= set GOPROXY=https://goproxy.io set GOROOT=c:\go set GOSUMDB=sum.golang.org set GOTMPDIR= set GOTOOLDIR=c:\go\pkg\tool\windows_amd64 set GCCGO=gccgo set AR=ar set CC=gcc set CXX=g++ set CGO_ENABLED=1 set GOMOD=NUL set CGO_CFLAGS=-g -O2 set CGO_CPPFLAGS= set CGO_CXXFLAGS=-g -O2 set CGO_FFLAGS=-g -O2 set CGO_LDFLAGS=-g -O2 set PKG_CONFIG=pkg-config set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\admin\AppData\Local\Temp\go-build704709586=/tmp/go-build -gno-record-gcc-switches ``` #### 开发工具 1. IDE使用goland,settings中设置go mod支持。安装插件protobuf generator,protobuf support 2. git客户端 #### 环境相关 ##### 宝塔 宝塔常用命令:https://www.bt.cn/btcode.html /etc/init.d/bt restart /etc/init.d/bt start /etc/init.d/bt stop 2,mysql/redis 外网面板地址: http://139.198.160.105:8888/5f880564 内网面板地址: http://10.130.48.11:8888/5f880564 username: fgwcvtbw password: 3b1bcff5 ##### Nacos 地址:http://139.198.170.82:8848/nacos 帐号:nacos 密码:nacos ##### Yapi api接口文档管理,api调试工具 ,类似于postman http://139.198.170.82:3000/login 帐号:admin@admin.com 密码:ymfe.org 使用yapi进行api调试,"运行"功能需要安装cross-request,chrome浏览器中Url中输入chrome://extensions/,将本项目根目录中的cross-request.rar拖进面板即可 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)