golang

Go

Go入门(7)——切片

33 0

切片与数组的关系Go入门(7)——切片Go语言中切片是对数组的抽象。Go数组的长度不可改变,在特定场景中可能显得比较笨重。Go提供了一种灵活的、功能强悍的内置类型切片,可理解为动态数组,其长度不固定且可以追加元素。追加元素可能导致切片容量增大。切片是对数组中一个连续片段的引用(这里所谓的数组被称为“相关数组”,通常是匿名的),所以切片是一个引用类型(类似于C/C++的数组类型、Python的list类型)。这个切片可以是整个数组,或者是由起始和终止索引标识的一些项形成的子集(终止索引标识的项并不包括在切片

Go

golang json格式化自定义日期格式

421 0

go 的time.Time,在json序列化是默认 2006-01-02T15:04:05Z07:00 的格式,十分不便, encoding/json包在序列化和反序列化的时候分别调用encode.go 下的Marshaler接口的MarshalJSON方法和decode.go下的Unmarshaler接口的UnmarshalJSON方法,只要类型分别实现这两个接口即可 这里我需要序列化的时候转为日期格式,反序列化显示为时间戳格式 package utilsimport ("errors""time" )

Go

golang文件复制

37 0

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

Go

golang令牌桶实现 [go-rate] 速率限制器

140 0

go-rate是速率限制器库,基于 Token Bucket(令牌桶)算法实现。 go-rate被用在LangTrend的生产中 用于遵守GitHub API速率限制。 速率限制可以完成一些特殊的功能需求,包括但不限于服务器端垃圾邮件保护、防止api调用饱和等。 库使用说明 构造限流器 我们首先构造一个限流器对象: limiter := NewLimiter(10, 1); 这里有两个参数:第一个参数是 r Limit。代表每秒可以向 Token 桶中产生多少 token。Limit 实际上是 float

Go

Golang中的切片与GC

140 0

今天再看 timer 源码的时候,在函数 clearDeletedTimers() 里看到一段对切片的处理代码,实现目的就是对一个切片内容进行缩容。 // src/runtime/time.go// The caller must have locked the timers for pp. func clearDeletedTimers(pp *p) {timers := pp.timers..

Go

手撸golang etcd raft协议之11

43 0

手撸golang etcd raft协议之11 缘起 最近阅读 [云原生分布式存储基石:etcd深入解析] (杜军 , 2019.1) 本系列笔记拟采用golang练习之 raft分布式一致性算法 分布式存储系统通常会通过维护多个副本来进行容错, 以提高系统的可用性。 这就引出了分布式存储系统的核心问题——如何保证多个副本的一致性?Raft算法把问题分解成了四个子问题: 1. 领袖选举(leader election)、 2. 日志复制(log replication)、 3. 安全性(safety) 4

Go

go每日一库 [go-rate] 速率限制器

68 0

go-rate是速率限制器库,基于 Token Bucket(令牌桶)算法实现。 go-rate被用在LangTrend的生产中 用于遵守GitHub API速率限制。 速率限制可以完成一些特殊的功能需求,包括但不限于服务器端垃圾邮件保护、防止api调用饱和等。 库使用说明 构造限流器 我们首先构造一个限流器对象: limiter := NewLimiter(10, 1);这里有两个参数:第一个参数是 r Limit。代表每秒可以向 Token 桶中产生多少 token。Limit 实际上是 float6

Go

golang中关于文件的操作

62 0

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('