这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天
基础功能竖向串联
start
go mod init github.com/sakasikai/GoFive
看hertz-jwt相关文档和代码,因为涉及到注册和登录
写业务的mysql schema、uml,用于分析业务
写idl,生成代码
// in ./cmd/user/
kitex -service UserService -module github.com/sakasikai/GoFive idl/rpc/user.thrift
-module module_name 如果当前目录不在 $GOPATH/src 下,那么必须指定该参数,
go.mod里的module语句指示了这个选项
\
整理目录
把自动生成的代码分文件管理,类似kitex-example easynote里的处理
\
生成的service里service.go有很多报错,
v0.14.0之后的包中很多函数增加了context上下文参数,所以很多函数由于缺少参数报错。 只需要修改go.mod中的require中github.com/apache/thrift v0.?.0改为 github.com/apache/thrift v0.13.0
然后再执行go mod tidy问题就能解决
连接数据库 ref
dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
dsn要写对,dbname需要创建,SQL:create database <dbname>
\
实现interface
handlers.go 来具体实现,会调用同级service包下的接口,其中涉及访问DB,对数据打包等
\
部署
etcd需要在docker中运行,
version: '3'
services:
Etcd:
image: "quay.io/coreos/etcd:v3.5.5"
environment:
- ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
- ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379
- ETCDCTL_API=3
ports:
- 2379:2379
然后再开启RPC服务,同时注册etcd注册中心
开启api服务,作为HTTP server,RPC调用其他微服务
在postman中调用
-
参数错误,断点显示是参数绑定问题,其实是Http请求格式包问题
POST请求,header要设置内容类型,body里传输数据,自动处理重定向
换成curl的例子如下:
curl --location --request POST '127.0.0.1:8080/v1/user/register' \
--header 'Content-Type: application/json' \
--data-raw '{
"username":"kinggo",
"password":"123456"
}'
数据库报错:
==》查询前创建表
==》gorm里有migrator的接口,可以判断和创建table
报错:reflect.Value.Set using unaddressable value
==》gorm查询要求引用,传入的是对象
\
成功
postman测试,经过HTTP、RPC,成功影响到数据库,并返回给postman
\
register 返回token
至此,成功竖向串联后端,虽然简陋,但后面可以迭代优化啦