golang
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
2022-01-05
62
1、读取文件(3种方法)
一、读取文件(方法1):
1、只读方式打开文件 file,err := os.Open()
2、读取文件 file.Read()
3、关闭文件流 defer file.Close()二、读取文件(方法2)bufio 读取文件
1、只读方式打开文件 file,err := os.Open()
2、创建reader对象 reader := bufio.NewReader(file)
3、ReadString读取文件 line, err := reader.ReadString('