随笔分类 -  golang

摘要:sync.Once 是 Go 标准库提供的使函数只执行一次的实现。作用与 init 函数类似,但有区别。在某些情况下预先初始化一个变量会增加函数的启动延迟,如果实际执行时可能用不上这个变量,那么初始化就是非必须的。sync.Once很好的解决了这个问题,Once可以在任意的位置调用,并且只会执行一次 阅读全文
posted @ 2022-03-13 14:24 EthanWell 阅读(208) 评论(0) 推荐(0) 编辑
摘要:原子操作 原子操作是指在程序运行中不能被中断的操作,原子操作是无锁的常常是由CPU指令直接实现,而锁一般由操作系统的调度器实现,所以原子操作的效率一般更高。 golang中原子操作支持的类型有:int32、int64、uint32、uint64、uintptr、unsafe.Pointer gola 阅读全文
posted @ 2022-03-13 11:07 EthanWell 阅读(579) 评论(0) 推荐(0) 编辑
摘要:起初是因为要去拉取一些第三方的数据,而第三方的API接口都有限流措施。比如6000/分钟,500/分钟。想着拉取数据就用多个协程的方式。但是容易超频,所以想着写一个限流的东东。网上有讲令牌桶类似下面这样:(网上的原理图) 令牌桶原理 有一个桶,桶有容量(cap:桶的容量)。 然后以恒定的速度往桶里加 阅读全文
posted @ 2022-03-02 23:48 EthanWell 阅读(819) 评论(0) 推荐(0) 编辑
摘要:go语言在设计上确保了一些安全的属性,限制了程序可能出错的途径。例如严格的类型转换规则。但也使得很多实现的细节无法通过go程序来访问,例如对于聚合类型(如结构体)的内存布局,或者一个函数对应的机器码。 这里我们将讨论unsafe包,它是由编译器实现的,实现了对语言内置特性的访问功能,这些特性一般是不 阅读全文
posted @ 2022-03-02 00:15 EthanWell 阅读(678) 评论(0) 推荐(0) 编辑
摘要:我们在设计产品的时候通常都会遇到消息通知的时候,比如用户下单支付成功,比如用户有站内信来可以实时通知。而http是单向的,客户端请求,服务端返回,这次请求就已经结束。而websocket可以保持连接实现长连接,在遇到通知时往往使用websocket来达到服务端主动向客户端发送消息的目的。 我们的目标 阅读全文
posted @ 2022-02-23 00:16 EthanWell 阅读(4319) 评论(0) 推荐(2) 编辑
摘要:在开发过程中,为了尽早发现代码中的缺陷和不住,我们经常要写单元测试。从而更快速的发现问题并解决问题,单元测试的效率也比传统手测更高很多。golang的单元测试很简单,先看一个例子 单元测试 用来检测一些程序逻辑的正确性。 简单示例 待测函数 package common func Add(a,b i 阅读全文
posted @ 2022-02-13 12:45 EthanWell 阅读(499) 评论(0) 推荐(0) 编辑
摘要:应用程序在运行时,总是会出现一些你意想不到的问题,例如:CPU使用率过高,内存不断增大(疑似内存泄露),或者是Goroutine数量不断增加(goroutine泄露)。那么在这些问题出现时如何进行排查呢,这里介绍pprof工具。 pprof是什么 pprof是析性能分析数据的工具,可以生成可视化的文 阅读全文
posted @ 2022-02-12 00:55 EthanWell 阅读(1388) 评论(0) 推荐(0) 编辑
摘要:Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。 slice基础 切片的结构 slice是一个结构体 参照源码: src/runtime/slice 阅读全文
posted @ 2022-02-10 22:18 EthanWell 阅读(365) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示