这是我参与「第五届青训营 」笔记创作活动的第 13 天 。
- 这篇笔记记录我进行大作业开发的过程。
- 有点杂乱,都是按照我遇到的问题一个个解决的顺序来的,等大作业全部完成之后来整理。
1.hertz框架快速导入
当前使用的是 Windows 环境,可以在main.go文件中编写如下的示例代码:
package main
import (
"context"
"github.com/cloudwego/hertz/pkg/app"
"github.com/cloudwego/hertz/pkg/app/server"
"github.com/cloudwego/hertz/pkg/common/utils"
"github.com/cloudwego/hertz/pkg/protocol/consts"
)
func main() {
h := server.Default()
h.GET("/ping", func(c context.Context, ctx *app.RequestContext) {
ctx.JSON(consts.StatusOK, utils.H{"message": "pong"})
})
h.Spin()
}
一定要启动go mod然后go mod tidy直接拉取即可。
2.搭建监听端口
h := server.Default(server.WithHostPorts("127.0.0.1:8080"))
3.启动多协程
发现有一些Go语言进阶的知识比如读写锁,协程之类的知识点没有做笔记,要用到的时候又得重新查资料,所以今天来补一下相关的内容记录。
1)协程
- 主死从随:指主程序结束后协程也会直接结束,所以要启动waitGroup来让main函数在协程返回后才结束。
import "sync" //包含waitGroup的包
var wg sync.WaitGroup
- 启动一个协程
wg.Add(1)
go func(){
//进行操作...
wg.Done()
}
wg.Wait() //会等待协程done之后才停止阻塞
2)读写锁,有空更新
4.关于POST路由获取请求参数
ctx.Query(请求参数的key)获取请求参数
- 示例代码:
h.POST("/douyin/user/register/?username=&password=", func(c context.Context, ctx *app.RequestContext) {
username := ctx.Query("username")
password := ctx.Query("password")
ctx.JSON(consts.StatusOK, utils.H{"username" : username, "password" : password})
})
插入一些关于鉴权的知识点
什么是鉴权
鉴权(authentication)是指验证用户是否拥有访问系统的权利。传统的鉴权是通过密码来验证的。这种方式的前提是,每个获得密码的用户都已经被授权。在建立用户时,就为此用户分配一个密码,用户的密码可以由管理员指定,也可以由用户自行申请。这种方式的弱点十分明显:一旦密码被偷或用户遗失密码,情况就会十分麻烦,需要管理员对用户密码进行重新修改,而修改密码之前还要人工验证用户的合法身份。
为了克服这种鉴权方式的缺点,需要一个更加可靠的鉴权方式。目前的主流鉴权方式是利用认证授权来验证数字签名的正确与否。
逻辑上,授权发生在鉴权之后,而实际上,这两者常常是一个过程。
- 以上内容在本次大作业中对于鉴权的概念就已经够用了,更深入的内容在:4种常见的鉴权方式及说明_代码搬运媛的博客-CSDN博客_st鉴权与at鉴权的区别