抖音demo实践(1) | 青训营笔记

186 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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语句指示了这个选项

ref

\

整理目录

把自动生成的代码分文件管理,类似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中运行,

image-20230216105406721.png

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注册中心

image-20230216105425957.png

开启api服务,作为HTTP server,RPC调用其他微服务

image-20230216105506071.png

在postman中调用

  • 参数错误,断点显示是参数绑定问题,其实是Http请求格式包问题

    POST请求,header要设置内容类型,body里传输数据,自动处理重定向

image-20230216114833735.png

image-20230216114844850.png

换成curl的例子如下:

curl --location --request POST '127.0.0.1:8080/v1/user/register' \
--header 'Content-Type: application/json' \
--data-raw '{
    "username":"kinggo",
    "password":"123456"
}'

数据库报错:

image-20230216115038317.png

==》查询前创建表

==》gorm里有migrator的接口,可以判断和创建table

报错:reflect.Value.Set using unaddressable value

==》gorm查询要求引用,传入的是对象

\

成功

postman测试,经过HTTP、RPC,成功影响到数据库,并返回给postman

\

register 返回token

至此,成功竖向串联后端,虽然简陋,但后面可以迭代优化啦