学习笔记:带你十天轻松搞定 Go 微服务系列(三)用户服务
学习课程 博客:带你十天轻松搞定 Go 微服务系列(三) 官方文档 go-zero.dev/cn/
一、生成 user model 模型
在你目录 xxx/gonivinck/code 下cd mall/service/user
vim model/user.sql
#创建sql 直接copygoctl model mysql ddl -src ./model/user.sql -dir ./model -c
解决: goctl: command not found
在宿主机未安装goctl是不能访问的使用的 进入 golang容器 使用就好了
docker ps | grep golang #查找golang 容器信息
docker exec -it container-id /bin/bash #进入容器 默认进入到/usr/src/code 可用dir查看目录
cd mall/service/user
goctl model mysql ddl -src ./model/user.sql -dir ./model -c #done
二、生成 user api 服务流程
流程解释:需要打开的文件
=> 对应应该做的 依次进行vim api/user.api
=>编写 api 文件 =>goctl api go -api ./api/user.api -dir ./api
三、生成 user rpc 服务流程
vim rpc/user.proto
=>编写 proto 文件 =>goctl rpc proto -src ./rpc/user.proto -dir ./rpc
go mod tidy
#下载整理依赖包
四、编写 user rpc 服务流程
RPC基础目录 gonivinck/code/mall/service/user/rpc
修改配置文件
vim rpc/etc/user.yaml
修改服务监听地址,端口号为 0.0.0.0:9000,
Etcd
服务配置,Mysql
服务配置,CacheRedis
服务配置添加 user model 依赖
vim rpc/internal/config/config.go
=> 添加 Mysql 服务配置,CacheRedis 服务配置的实例化vim rpc/internal/svc/servicecontext.go
=>注册服务上下文 user model 的依赖
- 添加用户注册逻辑 Register
vim common/cryptx/crypt.go
=> 添加密码加密工具vim rpc/etc/user.yaml
andvim rpc/internal/config/config.go
=> 添加密码加密 Salt 配置vim rpc/internal/logic/registerlogic.go
=> 添加用户注册逻辑
添加用户登录逻辑 Login
vim rpc/internal/logic/loginlogic.go
添加用户信息逻辑 UserInf
vim rpc/internal/logic/userinfologic.go
五、编写 user api 服务流程
API基础目录 gonivinck/code/mall/service/user/api
- 修改配置文件
vim api/etc/user.yaml
=> 修改配置文件 添加 user rpc 依赖
- 添加 user rpc 依赖
vim api/etc/user.yaml
=> 添加 user rpc 服务配置vim api/internal/config/config.go
=> 添加 user rpc 服务配置的实例化vim api/internal/svc/servicecontext.go
=> 注册服务上下文user rpc
的依赖
添加用户注册逻辑 Register
vim api/internal/logic/registerlogic.go
添加用户登录逻辑 Login
- 添加
JWT
工具vim common/jwtx/jwt.go
- 添加用户登录逻辑 `vim api/internal/logic/loginlogic.go
- 添加用户信息逻辑 UserInfo
vim api/internal/logic/userinfologic.go
六、 启动 user rpc 服务
bug 1
go get: github.com/tal-tech/go-zero@v1.3.0: parsing go.mod:
module declares its path as: github.com/zeromicro/go-zero
but was required as: github.com/tal-tech/go-zero
将goctl 中的 github.com/tal-tech/go-zero
改成 github.com/zeromicro/go-zero
执行命令: go mod tidy
bug 2
mall/common/cryptx imports
golang.org/x/crypto/scrypt.go: module golang.org/x/crypto@latest found (v0.0.0-20220214200702-86341886e292), but does not contain package golang.org/x/crypto/scrypt.go
解决:scrypt.go
导入包名写错改为 scrypt.go
mkdir -p $GOPATH/src/golang.org/x/
cd $GOPATH/src/golang.org/x/
git clone git@github.com:golang/crypto.git
(发现在golang 服务中克隆不下来 就去宿主机下载了移动进去)
go mod tidy #执行成功
bug 3
# mall/common/cryptx
../../../common/cryptx/crypt.go:10:11: cannot refer to unexported name scrypt.key
# mall/service/user/rpc/internal/svc
internal/svc/servicecontext.go:17:31: c.Mysql.DataSoure undefined (type struct { DataSource string } has no field or method DataSoure)
解决:低级错误,拍死自己! 手敲对比工具
包名访问的函数 需要大写 key => Key
DataSoure => DataSource
Starting rpc server at 127.0.0.1:9000…
七、启动 user api 服务
前提需要rpc 服务已启动 否则会报错
internal/logic/loginlogic.go:7:2: package mall/common/jwtx is not in GOROOT (/usr/local/go/src/mall/common/jwtx)
又字母问题 痛心
docker exec -it aa9845d08b57 /bin/bash
/usr/src/code/mall/service/user/api
go run user.go -f etc/user.yaml
Starting server at 0.0.0.0:8000…
本作品采用《CC 协议》,转载必须注明作者和本文链接