勿忘,须舍

  • 首页

  • 标签

  • 分类

  • 归档

  • python 随记

  • 关于

  • 搜索

golang gin使用记录

发表于 2021-02-25 分类于 go , gin

github.com/gin-contrib/sessions教程

gitHub: https://github.com/gin-contrib/sessions

使用参考:https://blog.csdn.net/qq_16763983/article/details/105049118

Gin Mode的选择

1
gin.SetMode(gin.ReleaseMode)

gin框架提供了下列三种模式。这三种mode分别对应了不同的场景。在我们开发调试过程中,使用debug模式就可以了。在上线的时候,一定要选择release模式。而test可以用在测试场景中。

const (
// DebugMode indicates gin mode is debug.
DebugMode = “debug”
// ReleaseMode indicates gin mode is release.
ReleaseMode = “release”
// TestMode indicates gin mode is test.
TestMode = “test”
)

golang jwt+token验证

Go实战–golang中使用JWT(JSON Web Token)
Golang 实现JWT认证

gin框架中自定义向log中写入调试信息

How to write log file

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
func main() {
// Disable Console Color, you don't need console color when writing the logs to file.
gin.DisableConsoleColor()

// Logging to a file.
f, _ := os.Create("gin.log")
gin.DefaultWriter = io.MultiWriter(f)

// Use the following code if you need to write the logs to file and console at the same time.
// gin.DefaultWriter = io.MultiWriter(f, os.Stdout)

router := gin.Default()
router.GET("/ping", func(c *gin.Context) {
c.String(200, "pong")
})

   router.Run(":8080")
}

可以看到gin是通过DefaultWriter来确定日志写入的,查看代码(gin/mode.go中)如下:

1
2
3
4
5
6
7
8
9
// DefaultWriter is the default io.Writer used the Gin for debug output and
// middleware output like Logger() or Recovery().
// Note that both Logger and Recovery provides custom ways to configure their
// output io.Writer.
// To support coloring in Windows use:
// import "github.com/mattn/go-colorable"
// gin.DefaultWriter = colorable.NewColorableStdout()
var DefaultWriter io.Writer = os.Stdout
var DefaultErrorWriter io.Writer = os.Stderr

基于Token的身份验证的原理

参考:https://www.cnblogs.com/wnvalentin/articles/10816221.html

csrf token 生成与验证是如何做的呢?

  1. 服务器会在cookie中保存一个csrf_token_key, 用作钥匙。
  2. 服务器会在页面生成时,获取csrf_token_key这个钥匙, 生成一个随机的csrf_token令牌,当表单提交时,获取到csrf_token通过csrf_token_key解密比较是否一致。

Gin框架自定义解析json中的时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import (
"fmt"
"saasMigrateProject/go2cloud_platform/settings"

"time"
)

type Datetime time.Time

func (t Datetime) MarshalJSON() ([]byte, error) {
var stamp = fmt.Sprintf("\"%v\"", time.Time(t).Format(settings.TimeFormat))
return []byte(stamp), nil
}

func (t *Datetime) UnmarshalJSON(data []byte) error {
timeStr := string(data)
if timeStr == "null" {
return nil
}
tm, err := time.Parse(settings.TimeFormat, timeStr)
*t = Datetime(tm)
return err
}

func (t Datetime) Value() time.Time {
return time.Time(t)
}

func (t Datetime) Now() Datetime {
return Datetime(time.Now())
}

golang 常见panic处理

发表于 2021-02-23 分类于 go , panic

记录golang常见panic及处理。

阅读全文 »

golang 将数据库转换为gormt结构

发表于 2021-02-23 分类于 go , command

gorm-tools是将gorm mysql数据库转 struct 工具,可以将mysql数据库自动生成golang sturct结构,带大驼峰命名规则,带json标签。

阅读全文 »

golang gorm使用记录

发表于 2021-02-23 分类于 go , gorm

用于Golang的出色的ORM库旨在对开发人员友好。
GORM 官方支持的数据库类型有: MySQL, PostgreSQL, SQlite, SQL Server

阅读全文 »

go get命令及下载异常处理

发表于 2021-02-20 分类于 go , command

go get 命令可以借助代码管理工具通过远程拉取或更新代码包及其依赖包,并自动完成编译和安装。整个过程就像安装一个 App 一样简单。

这个命令可以动态获取远程代码包,目前支持的有 BitBucket、GitHub、Google Code 和 Launchpad。在使用 go get 命令前,需要安装与远程包匹配的代码管理工具,如 Git、SVN、HG 等,参数中需要提供一个包名。

阅读全文 »

Linux flock command

发表于 2021-02-19 分类于 Linux , command , flock

linux在多个进程同时操作同一份文件的时候,很容易导致文件混乱,这时候就需要锁,来保证文件的完成性。
flock主要三种操作类型:

  • lock_sh,常被用作读共享锁;
  • LOCK_EX,只能被一个进行使用,常被用作写锁;
  • LOCK_UN,释放锁;

使用共享锁LOCK_SH,如果是读取,不需要等待,但如果是写入,需要等待读取完成。
使用独占锁LOCK_EX,无论写入/读取都需要等待。
LOCK_UN,无论使用共享/读占锁,使用完后需要解锁。
LOCK_NB,当被锁定时,不阻塞,而是提示锁定。

阅读全文 »

rclone 教程

发表于 2021-02-07 分类于 redis

Rclone是一个命令行程序,支持不同网盘的同步上传,下载等功能。
官方地址:https://rclone.org/

阅读全文 »

redis缓存雪崩、穿透、击穿概念及解决办法

发表于 2021-02-07 分类于 redis

redis缓存示意图:

redis缓存示意图

阅读全文 »

使用Celery Once来防止Celery重复执行同一个任务

发表于 2021-02-05 分类于 celery

在使用Celery的时候发现有的时候Celery会将同一个任务执行两遍。比如相同的任务在不同的worker中被分别执行,并且时间只相差几毫秒,使用Celery Once可以处理这一情况。Celery Once是利用 Redis 加锁来实现, Celery Once在 Task类基础上实现了QueueOnce类,该类提供了任务去重的功能,所以在使用时,我们自己实现的方法需要将QueueOnce设置为base。

阅读全文 »

Golang在package main包下的中函数互相调用

发表于 2021-02-01 分类于 go

Golang Main包下多个文件的相互调用,引发 .\main.go:82:2: undefined: tsPra01异常,处理如下。

阅读全文 »
123…16
Mr Wang

Mr Wang

行动了才会有故事,说出来才会有结果。
154 日志
59 分类
43 标签
RSS
GitHub E-Mail Weibo
© 2022 Mr Wang
总访问量次 | 总访客数人