202102-07 golang使用 geoip库, 通过ip 获取国家,省市,城市 NEW Github: https://github.com/oschwald/geoip2-golang1.进入后,开头部分会告诉下载ip库,打开页面https://dev.maxmind.com/geoip/geoip2/geolite2/找到下载地址也就是下载地址:http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz下载完成后解压,我的地址为:/www/test/ip/GeoLi... Read More >
202102-06 golang定时器timer NEW 摘要在 Go 里有很多种定时器的使用方法,像常规的 Timer、Ticker 对象,以及经常会看到的 time.After(d Duration) 和 time.Sleep(d Duration) 方法,今天将会介绍它们的使用方法以及会对它们的底层源码进行分析,以便于在更好的场景中使用定时器。Go 里的定时器我们先来看看 Timer 对象 以及 time.After 方法,它们都有点偏一次使用的特性。对于 Timer 来说,使用完后还可以再次启用它,只需要调用它的 Reset... Read More >
202102-05 golang 获取本机真实IP NEW 直接上代码package main import ( "errors" "fmt" "net" ) func externalIP() (net.IP, error) {  ... Read More >
202102-04 golang实现字符串相似度计算函数 Levenshtein和SimilarText levenshtein() 和 similar_text() 是 PHP 内置的两个字符串相似度计算函数。Levenshtein 计算两个字符串之间的编辑距离,SimilarText 计算两个字符串的相似度。下面使用Go分别实现二者。Levenshteinpackage main import "fmt" func main() { first :=&nbs... Read More >
202102-03 golang时间戳转换 一、获取时间1.1 获取当前时间代码实现package main import ( "fmt" "time" ) func main() { currentTime := time.Now() ... Read More >
202102-02 GORM错误处理 下面介绍GORM关于错误的处理方式一、错误处理如果在执行SQL查询的时候,出现错误,GORM 会将错误信息保存到 *gorm.DB 的Error字段,我们只要检测Error字段就可以知道是否存在错误。var replica_acc replica.ReplicaAcc err := model.Db.Table("replica_acc"). Select("acco... Read More >
202102-01 golang定时任务库cron 简介在Linux中,Cron是计划任务管理系统,通过crontab命令使任务在约定的时间执行已经计划好的工作,例如定时备份系统数据、周期性清理缓存、定时重启服务等。本文介绍的cron库是一个用于管理定时任务的库,就是用Go实现Linux中crontab命令的相似效果。快速使用文本代码使用 Go Modules。创建目录并初始化:$ mkdir cron && cd cron $ go mo... Read More >
202101-29 gorm中查询范围scope详解 介绍Scopes 使你可以复用通用的逻辑,共享的逻辑需要定义为 func(*gorm.DB) *gorm.DB 类型实战func AmountGreaterThan1000(db *gorm.DB) *gorm.DB { return db.Where("amount > ?", 1000) } func P... Read More >
202101-28 gin获取http中的body参数 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 背景当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) 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 >