202101-28 gin获取http中的body参数 NEW post发送数据有几种形式,form和流是最常用的。特别是在程序里使用httpclients,一般都算通过流发送。在php里,是通过php://input来获取的。在gin中,可以通过c.Request.Body.Read(buf)。具体代码如下:package main import ( "fmt" "net... Read More >
202101-27 gorm没有deleted_at的查询如何去掉这个条件判断之unscoped NEW 背景当tableStruct内部有gorm.Model时,默认的查询语句都会包含 deleted_at IS NULL 的判断,如何不限制这个条件呢?原理分析gorm.Model 是一个包含一些基本字段的结构体, 包含的字段有 ID,CreatedAt, UpdatedAt, DeletedAt解决方法1. Unscoped方法model.Db.Debug().Unscoped().Where(map[string]interface{}{"id":&nb... Read More >
202101-26 go中redigo操作以及连接池(github.com/garyburd/redigo/redis) NEW conn:package main import ( "fmt" "github.com/garyburd/redigo/redis" ) func main() { c, err := redis.D... Read More >
202101-26 golang与redis连接池的那些注意事项 一、什么是连接池,连接池有什么用先看看别人是怎么介绍连接池的吧:连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其... Read More >
202101-25 go命令行参数os.Args和flag包 最近在学习golang,结果遇到了golang如何获取命令行参数?的疑问,下面顺便分享给大家os库os可以通过变量Args来获取命令参数,os.Args返回一个字符串数组,其中第一个参数就是执行文件本身。package main import ( "fmt" "os" ) func main() { &... Read More >
202101-24 golang结构体slice排序 概念go语言的slice()不仅仅可以对int类型的数组进行排序,还可以对struct类型的数组进行排序排序函数1. Slice() 不稳定排序2. SliceStable() 稳定排序3. SliceIsSorted() 判断是否已排序结构体定义如下,我们完全可以定义更复杂的结构体:// 结构体定义 type test struct { value int &... Read More >
202101-23 go中JSON操作实战 生成json1.将struct或者map解析为jsonpackage main import ( "encoding/json" "fmt" ) type student struct { Name string ... Read More >
202101-22 gin源码解读-路由算法 gin的路由算法gin的是路由算法其实就是一个Trie树(也就是前缀树). 有关数据结构的可以自己去网上找相关资料查看.1.1.1. 注册路由预处理我们在使用gin时通过下面的代码注册路由1.1.2. 普通注册router.POST("/somePost", func(context *gin.Context) { context.String(http.StatusOK,&n... Read More >
202101-21 gin源码解读-牛逼的context gin牛逼的contextGin封装的最好的地方就是context和对response的处理. github的README的介绍,基本就是对这两个东西的解释. 本篇文章主要解释context的使用方法, 以及其设计原理1.1.1. 为什么要将Request的处理封装到Context中在阅读gin的源码时, 请求的处理是使用type HandlerFunc func(*Context)来处理的. 也就是func(context *gin.Context) {... Read More >
202101-20 gin源码解读-揭开gin的神秘面纱 揭开gin的神秘面纱1.1.1. 数据如何在gin中流转package mainimport "github.com/gin-gonic/gin"func main() { r := gin.Default() r.GET("/ping", func(c *g... Read More >
202101-19 gin源码解读-net/http的大概流程 net/http的大概流程1.1.1. gin框架预览上图大概是gin里面比较重要的模块. 从gin的官方第一个demo入手.package mainimport "github.com/gin-gonic/gin"func main() { r := gin.Default() r.GET(&qu... Read More >
202101-18 gin框架使用jwt对前端用户身份认证 1. 前言JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。2. gin集成Jwtgin 可以自定义中间件,所以集成jwt可以以中间件的方式引入,jwt在golang上已有好几个现成的开源库,我用的是jwt-go,具体使用可以查看GitHub、或 https://pkg.go.dev/github.com/dgrijalva/jwt-go... Read More >
202101-17 golang各种类型相互转换 时间格式化格林威治时间转国内时间格式(带时差转换) TZpackage main import ( "fmt" "time" ) func main() { // "2019-01-05T11:21:03Z" 转&nbs... Read More >
202101-16 go语言time.Add()方法使用变量作为参数报错:Cannot use xxx(type int) as the type Duration 在使用time.Add()方法时,可以直接传入一个整数作为参数,如:func main() { t := time.Now() fmt.Println(t) t = t.Add(10 * time.Millisecond) ... Read More >
202101-15 golang日志切割归档 1.1.1. 使用Lumberjack进行日志切割归档这个日志程序中唯一缺少的就是日志切割归档功能。Zap本身不支持切割归档日志文件为了添加日志切割归档功能,我们将使用第三方库Lumberjack来实现。1.1.2. 安装执行下面的命令安装Lumberjack go get -u github.com/natefinch/lumberjack1.1.3. zap logger中加入Lumberjack... Read More >
202101-14 golang自带日志logger介绍 1. Logger1.1.1. 介绍在许多Go语言项目中,我们需要一个好的日志记录器能够提供下面这些功能:能够将事件记录到文件中,而不是应用程序控制台。日志切割-能够根据文件大小、时间或间隔等来切割日志文件。支持不同的日志级别。例如INFO,DEBUG,ERROR等。能够打印基本信息,如调用文件/函数名和行号,日志时间等。1.1.2. 默认的Go Logger在介绍Uber-go的zap包之前,让我们先看看Go语言提供的基本日志功能。Go语言提供的默认日志包是 https:/... Read More >
202101-14 go好用的配置库viper 项目地址github.com/spf13/viper安装go get github.com/spf13/viper配置文件aaa.yaml: : : : :简单使用 ( ) (){ : () () : () { () } :() (,,)... Read More >
202101-13 go语言系列之日志库zap Zap Logger1.1.1. Uber-go ZapZap是非常快的、结构化的,分日志级别的Go日志库。1.1.2. 为什么选择Uber-go zap它同时提供了结构化日志记录和printf风格的日志记录它非常的快根据Uber-go Zap的文档,它的性能比类似的结构化日志包更好——也比标准库更快。 以下是Zap发布的基准测试信息记录一条消息和10个字段:记录一个静态字符串,没有任何上下文或printf风格的模板:1.1.3. 安装运行下面的命令安装zap &n... Read More >
202101-12 golang-zap日志库的使用及gin框架配置zap记录日志 介绍zap 是go 中比较火的一个日志库,提供不同级别的日志,并且速度快官方文档: https://pkg.go.dev/go.uber.org/zap#section-readme, 也可以github 直接搜索 zap。 文档上面有全面的介绍。鼓励大家观看文档, 可以有视频资料做相关引导,但学东西必须要看到官方文档。尤其是文档也已经适合入门了,先看Quick Start 部分,一般都有入门例子及整体框架介绍。官方文档介绍,非常清晰,还有相关数据对比,并且一般都会具有 ex... Read More >
202101-11 window下gin集成endless报错undefined: syscall.SIGUSR1处理 在 go 的安装目录修改 Go\src\syscall\types_windows.go,增加如下代码:var signals = [...]string{ // 这里省略N行。。。。 /** 找到此位置添加如下 */ 16: "SI... Read More >