项目开始 | 青训营笔记

130 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第 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)是指验证用户是否拥有访问系统的权利。传统的鉴权是通过密码来验证的。这种方式的前提是,每个获得密码的用户都已经被授权。在建立用户时,就为此用户分配一个密码,用户的密码可以由管理员指定,也可以由用户自行申请。这种方式的弱点十分明显:一旦密码被偷或用户遗失密码,情况就会十分麻烦,需要管理员对用户密码进行重新修改,而修改密码之前还要人工验证用户的合法身份。

为了克服这种鉴权方式的缺点,需要一个更加可靠的鉴权方式。目前的主流鉴权方式是利用认证授权来验证数字签名的正确与否。

逻辑上,授权发生在鉴权之后,而实际上,这两者常常是一个过程。