学习笔记:带你十天轻松搞定 Go 微服务系列(三)用户服务

学习课程 博客:带你十天轻松搞定 Go 微服务系列(三) 官方文档 go-zero.dev/cn/

一、生成 user model 模型

在你目录 xxx/gonivinck/code 下
cd mall/service/user
vim model/user.sql #创建sql 直接copy
goctl 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

  1. 修改配置文件 vim rpc/etc/user.yaml

    修改服务监听地址,端口号为 0.0.0.0:9000,Etcd 服务配置,Mysql 服务配置,CacheRedis 服务配置

  2. 添加 user model 依赖

  • vim rpc/internal/config/config.go=> 添加 Mysql 服务配置,CacheRedis 服务配置的实例化
  • vim rpc/internal/svc/servicecontext.go =>注册服务上下文 user model 的依赖
  1. 添加用户注册逻辑 Register
  • vim common/cryptx/crypt.go => 添加密码加密工具
  • vim rpc/etc/user.yaml and vim rpc/internal/config/config.go => 添加密码加密 Salt 配置
  • vim rpc/internal/logic/registerlogic.go => 添加用户注册逻辑
  1. 添加用户登录逻辑 Login vim rpc/internal/logic/loginlogic.go

  2. 添加用户信息逻辑 UserInf vim rpc/internal/logic/userinfologic.go

五、编写 user api 服务流程

API基础目录 gonivinck/code/mall/service/user/api

  1. 修改配置文件

vim api/etc/user.yaml=> 修改配置文件 添加 user rpc 依赖

  1. 添加 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 的依赖
  1. 添加用户注册逻辑 Register vim api/internal/logic/registerlogic.go

  2. 添加用户登录逻辑 Login

  • 添加 JWT 工具 vim common/jwtx/jwt.go
  • 添加用户登录逻辑 `vim api/internal/logic/loginlogic.go
  1. 添加用户信息逻辑 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 协议》,转载必须注明作者和本文链接
滴水穿石,石破天惊----晓疯子
zhaocrazy
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!