Golang | redis
概述
网上有很多golang操作redis的例子,我使用github.com/gomodule/redigo/redis包写一个关于redis分布式锁的问题。
redis分布式锁
锁需要的几个组件
- 获取锁
- 删除锁
分布式锁还需要
- 给锁加上唯一id (只能获取和删除自己的锁)
- 给锁加上过期时间 (防止死锁)
golang代码
推荐使用redis的连接池
……网上有很多golang操作redis的例子,我使用github.com/gomodule/redigo/redis包写一个关于redis分布式锁的问题。
锁需要的几个组件
分布式锁还需要
推荐使用redis的连接池
……在使用go mod的过程中,依赖的包往往是第三方库,当我们自定义一个包并且放在github.com私有仓库时候,按照原来的方法则会有如下问题。
get "gitlab.com/xxx/zz": found meta tag get.metaImport{Prefix:"gitlab.com/xxx/zz", VCS:"git", RepoRoot:"https://gitlab.com/xxx/zz.git"} at //gitlab.com/xxx/zz?go-get=1
verifying gitlab.com/xxx/zz@v0.0.1: gitlab.com/xxx/zz@v0.0.1: reading https://sum.golang.org/lookup/gitlab.com/xxx/zz@v0.0.1: 410 Gone
这个错误是因为新版本go mod会对依赖包进行checksum校验,但是私有仓库对sum.golang.org是不可见的,它当然没有办法成功执行checksum。
golang有三种方式实现定时器:
通过 time.NewTicker(d)的方式实现定时器
d := time.Duration(time.Second * 2)
t1 := time.NewTicker(d)
defer t1.Stop()
go func() {
for {
<- t1.C
fmt.Println("NewTicker...")
}
}()
通过 time.NewTimer(d)的方式实现定时器
……最近要在http接口上加一个token认证,但是接口很多,有没有一个省时省力的办法来解决。token的使用流程是:
net/http库写的。为了实现目的,还需要添加的功能是:JWT身份认证可以解决第一个问题,mux.Router的Use方法函数可以作为一个中间件, 拦截请求。func (r *Router) Use(mwf ...MiddlewareFunc) {
for _, fn := range mwf {
r.middlewares = append(r.middlewares, fn)
}
}
下载地址:
……google protobuf已经提供了空参数
//empty.proto
message Empty {<!-- -->}
使用方法,在proto文件中导入empty.proto, 定义一个请求参数和返回值为空的函数emptyfunction, 函数名字可以自定义。
//server.proto
import "google/protobuf/empty.proto";
service pbservice{
rpc emptyfunction(google.protobuf.Empty) return{google.protobuf.Empty}
}
以golang语言为例子,在go中对应的函数为:
……最近在巩固cgo的基础知识,在网上看到一篇Go和C之间 字符串数组、切片类型转换的文章,让我想到我之前写的一篇在go中遍历C结构体数组的文章,让我有新的方法来解决之前的问题,把C的数组转化为Go的切片,对于文章的方法我直接”拿来主义“。
我们将一段特定长度的内存统称为数组。C语言的字符串是一个char类型的数组,字符串的长度需要根据表示结尾的NULL字符的位置确定。C语言中没有切片类型。
在Go语言中,数组是一种值类型,而且数组的长度是数组类型的一个部分。Go语言字符串对应一段长度确定的只读byte类型的内存。Go语言的切片则是一个简化版的动态数组。
Go语言和C语言的数组、字符串和切片之间的相互转换可以简化为Go语言的切片和C语言中指向一定长度内存的指针之间的转换。
现在有个应用场景,我们要在go中获取C结构体数组中的值。在C语言中,对于结构体数组,我们可以利用指针的偏移量来获取我们想要的值的位置。在go中我们怎么使用C指针和偏移量进行运算呢?下面的文字中C指的是C语言
gocolly是golang语言开发的爬虫包,通过gocolly来进行模拟网站的登录,
目标已经确立,开始行动。
$ go get -u github.com/gocolly/colly
登录网站:https://www.bilibili.com/
获取cookie:
最近在研究一款游戏的源码。发现里面的通信协议是protobuf定义的,但还是自己定义了协议头部,类似 head + body。先解析头部里所存储的整个包的数据长度,然后再解析包剩余的数据,这样做的目的是为了防止沾包。我在想都用了protobuf了为啥不直接用grpc呢。一时想不出,于是我用golnag + protobuf 做了一个简单的client + server
……