go-zero 单体应用实践(一)

本文详细介绍了如何在Go环境下搭建Web应用,包括环境安装、配置管理、API定义、模型生成、业务逻辑实现以及JWT鉴权的运用。通过实例展示了用户注册和登录功能的实现,并提供了测试步骤,帮助读者理解Go语言开发Web服务的流程。

环境搭建

官方文档

  • Golang 环境安装 👉 golang
  • Go Module设置 go env -w GO111MODULE="on"
  • goctl安装 👉 goctl
  • protoc & protoc-gen-go安装 goctl env check -i -f --verbose

etcdredismysql 等开发工具可以通过Docker 快速搭建;可参考👉 gonivinck

创建单体应用

1、创建目录

mkdir user-login
cd user-login
go mod init user-login

2、编辑api文件 userlogin.api

api语法介绍

type (
	RegisterRequest {
   
   
		Name     string `json:"name"`
		Email    string `json:"email"`
		Password string `json:"password"`
	}

	RegisterResponse {
   
   
		ID    int    `json:"id"`
		Name  string `json:"name"`
		Email string `json:"email"`
	}

	LoginRequest {
   
   
		Email    string `json:"email"`
		Password string `json:"password"`
	}

	LoginResponse {
   
   
		Token  string `json:"token"`
		Expire int64  `json:"expire"`
	}
)

service userlogin-api {
   
   
	@handler RegisterHandler
	post /api/register(RegisterRequest) returns (RegisterResponse);
	
	@handler LoginHandler
	post /api/login(LoginRequest) returns (LoginResponse);
}

3、执行生成代码命令

goctl api go -api userlogin.api -dir .
go mod tidy

生成文件目录

userlogin
├─etc // // 配置文件
├─internal
│  ├─config  // 配置声明type
│  ├─handler  // 路由及handler转发
│  ├─logic  // 业务逻辑
│  ├─svc // logic所依赖的资源池
│  └─types  // request、response的struct,根据api自动生成

4、编辑配置文件 userlogin/etc/userlogin-api.yaml

Name: userlogin-api
Host: 0.0.0.0
Port: 8888
Mysql:
  DataSource: root:123456@tcp(mysql:3306)/user?charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai

CacheRedis:
  - Host: redis:6379
    Type: node

Salt: DWe7OZf6KPlnv7yy
Auth:
  AccessSecret: uOvKLmVfztaXGpNYd4Z0I1SiT7MweJhl
  AccessExpire: 86400

添加config声明 userlogin/internal/config/config.go
其中Salt 用来密码加密存储,Auth 用于 jwt鉴权

type Config struct {
   
   
	rest.RestConf
	Mysql struct {
   
   
		DataSource string
	}

	CacheRedis cache.CacheConf
	Salt       string
	Auth       struct {
   
   
		AccessSecret string
		AccessExpire int64
	}
}

4、生成Model文件

添加用户表 userlogin/model/user.sql

CREATE TABLE `user` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255)  NOT NULL DEFAULT '' COMMENT '用户姓名',
  `email` varchar
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Devin_S

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值