Go
2022-01-05
57
结构体值接收者和指针接收者实现接口的区别值接收者
如果结构体中的方法是值接收者,那么实例化后的结构体值类型和指针类型都可以赋值给接口变量指针接收者
如果结构体中的方法是指针接收者,那么只有实例化后的指针类型可以赋值给接口变量,结构体值类型不能赋值给接口变量demo定义一个Animal接口,Animal中有两个方法,分别是SetName和GetName,分别让Gog结构体和Cat结构体实现接口中的方法type Animaler interface {SetName(string)GetName() stri
2022-01-05
33
切片与数组的关系Go入门(7)——切片Go语言中切片是对数组的抽象。Go数组的长度不可改变,在特定场景中可能显得比较笨重。Go提供了一种灵活的、功能强悍的内置类型切片,可理解为动态数组,其长度不固定且可以追加元素。追加元素可能导致切片容量增大。切片是对数组中一个连续片段的引用(这里所谓的数组被称为“相关数组”,通常是匿名的),所以切片是一个引用类型(类似于C/C++的数组类型、Python的list类型)。这个切片可以是整个数组,或者是由起始和终止索引标识的一些项形成的子集(终止索引标识的项并不包括在切片
2022-01-05
421
go 的time.Time,在json序列化是默认 2006-01-02T15:04:05Z07:00 的格式,十分不便,
encoding/json包在序列化和反序列化的时候分别调用encode.go 下的Marshaler接口的MarshalJSON方法和decode.go下的Unmarshaler接口的UnmarshalJSON方法,只要类型分别实现这两个接口即可
这里我需要序列化的时候转为日期格式,反序列化显示为时间戳格式
package utilsimport ("errors""time"
)
2022-01-05
37
golang 文件复制
/** **/func Copy(srcFile, dstFile string) (int64, error) {sourceFileStat, err := os.Stat(srcFile)if err != nil {return 0, err}if !sourceFileStat.Mode().IsRegular() {return 0, fmt.Errorf("%s is not a regular file", srcFile)}source, err := os.Op
2022-01-05
140
go-rate是速率限制器库,基于 Token Bucket(令牌桶)算法实现。 go-rate被用在LangTrend的生产中 用于遵守GitHub API速率限制。
速率限制可以完成一些特殊的功能需求,包括但不限于服务器端垃圾邮件保护、防止api调用饱和等。
库使用说明
构造限流器
我们首先构造一个限流器对象:
limiter := NewLimiter(10, 1);
这里有两个参数:第一个参数是 r Limit。代表每秒可以向 Token 桶中产生多少 token。Limit 实际上是 float
2022-01-05
140
今天再看 timer 源码的时候,在函数 clearDeletedTimers() 里看到一段对切片的处理代码,实现目的就是对一个切片内容进行缩容。
// src/runtime/time.go// The caller must have locked the timers for pp.
func clearDeletedTimers(pp *p) {timers := pp.timers..
2022-01-05
43
手撸golang etcd raft协议之11
缘起
最近阅读 [云原生分布式存储基石:etcd深入解析] (杜军 , 2019.1)
本系列笔记拟采用golang练习之
raft分布式一致性算法
分布式存储系统通常会通过维护多个副本来进行容错,
以提高系统的可用性。
这就引出了分布式存储系统的核心问题——如何保证多个副本的一致性?Raft算法把问题分解成了四个子问题:
1. 领袖选举(leader election)、
2. 日志复制(log replication)、
3. 安全性(safety)
4
2022-01-05
68
go-rate是速率限制器库,基于 Token Bucket(令牌桶)算法实现。 go-rate被用在LangTrend的生产中 用于遵守GitHub API速率限制。
速率限制可以完成一些特殊的功能需求,包括但不限于服务器端垃圾邮件保护、防止api调用饱和等。
库使用说明
构造限流器
我们首先构造一个限流器对象:
limiter := NewLimiter(10, 1);这里有两个参数:第一个参数是 r Limit。代表每秒可以向 Token 桶中产生多少 token。Limit 实际上是 float6