202201-01 一篇文章搞清楚直播协议RTMP NEW 说起RTMP协议,相信很多人都比较陌生,这个协议相对HTTP、HTTPS、TCP等我们常见的协议而言,我们在工作中确实较少接触它,但是对现在如火如荼的直播行业,RTMP是一个重要的协议,它在实时音视频场景中使用非常广泛,而且目前市占率很高。本文的主要内容是分析RTMP的协议,当然不是纯理论分析,这样没多大意思,还是结合实践抓包文件来具体分析,这样才能较好地理解RTMP的内涵。具体如何抓包见本文末尾的“Android抓包”模块。希... Read More >
202102-11 如何在golang中用rand生成随机不重复的数字 NEW 背景如何在golang中用rand生成随机不重复的数字?其实要解决这个问题也不难,这篇文章给出了相对应的分析和解答,下面我们一起来看看解决的方法。在Golang中,有两个包提供了rand,分别为 "math/rand" 和 "crypto/rand", 对应两种应用场景。一、"math/rand" 包实现了伪随机数生成器。也就是生成 整形和浮点型。二、”crypto/rand“ 包实现了用于加解密的更安全... Read More >
202102-10 golang之中文和unicode字符之间转换 NEW Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。在实际应用有很多需要中文和unicode转换的场景,这里主要介绍通过golang实现中文和unicode互相转换。1、中文转unicodepackage main import ( "fmt" &q... Read More >
202102-09 golang使用纯真IP数据库获取地理位置(推荐) 准备工作(纯真IP数据库下载)纯真IP官网:https://www.cz88.net/进入官网后 找到 纯真社区版IP库离线版免费下载 :https://www.cz88.net/geo-public 扫码获取最新的下载地址下载完成后进入下载文件安装下载好的exe文件,安装完成后打开项目安装根目录,将qqwry.dat文件复制到golang项目中依赖mahonia 处理 GBK 编码的地址信息go get code.google.com/p/ma... Read More >
202102-08 golang项目监听6000端口浏览器无法访问 背景最近新开了一个项目 基于gin搭建,端口监听了6000,发现接口无法访问谷歌浏览器报错如下:问题分析查看端口占用情况netstat -lnp |grep 6000windows 用下面的命令netstat -ano | findstr "6000"发现并没有被占用,程序启动也没有任何报错其实不止 6000,如果你配置成 6666 ,也是无法访问成功的首先,当我们将项目的端口设置为 6... Read More >
202102-07 golang使用 geoip库, 通过ip 获取国家,省市,城市 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 摘要在 Go 里有很多种定时器的使用方法,像常规的 Timer、Ticker 对象,以及经常会看到的 time.After(d Duration) 和 time.Sleep(d Duration) 方法,今天将会介绍它们的使用方法以及会对它们的底层源码进行分析,以便于在更好的场景中使用定时器。Go 里的定时器我们先来看看 Timer 对象 以及 time.After 方法,它们都有点偏一次使用的特性。对于 Timer 来说,使用完后还可以再次启用它,只需要调用它的 Reset... Read More >
202102-05 golang 获取本机真实IP 直接上代码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 mainimport ( "fmt" "os")func main() { fmt.Println("命令行的参数有",... 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 >