
go语言
文章平均质量分 55
go语言学习、分享
Skyego
分布式存储小朋友。
展开
-
golang简单定时执行功能
golang中的cron功能完整全面,但是如果只需要定时每天在某个时间点执行某任务,只需要如下简单实现。获取到自定时间的Durationimport ( "testing" "time")//SetTime 获取到自定时间的Duration 误差在1s内//计算设置时间和当前时间的差值,大于当前时间则返回,否则为第二天的时间func SetTime(hour, min, second int) (d time.Duration) { now := time.Now() setTim.原创 2021-11-21 21:02:41 · 3399 阅读 · 2 评论 -
go tool pprof自动化检测
注意控制频率,因为可能会STW问题背景平时查看问题,可以通过go tool进行查看,内存,函数栈,CPU等信息,但是如果需要定时获取内存信息,查看内存占用排名较高的函数是不是某个特定的函数,就需要调研go tool的高阶使用方案。梳理调研经过调研 pprof可以通过添加参数获取不同的指标,详见https://github.com/google/pprof/blob/master/doc/README.md如下两个例子,第一个获取文本格式的数据,以cum排序,显示10条数据,也就是获取cum排序前十原创 2021-11-02 18:30:37 · 355 阅读 · 0 评论 -
go tools pprof 快速使用笔记
目标:快速安装 + 成功使用上,主要是应对工作当中突然需要使用这个进行分析,并且之前没用过的情况安装1.首先安装go并配置环境go version 判断是否成功2.安装go tools到github上下载go tools(https://github.com/golang/tools%E3%80%82%E8%A7%A3%E5%8E%8B%E8%AF%A5%E6%96%87%E4%BB%B6%EF%BC%8C%E5%B9%B6%E5%B0%86%E6%96%87%E4%BB%B6%E5%A4%B9%原创 2021-04-08 13:09:02 · 1038 阅读 · 0 评论 -
讲给Java/C++开发者的Go高效并发编程-学习笔记
Channel 没有buffer的,需要发送和接收的同时准备好,不然另一方就会阻塞住可以用channel实现 futureRate Limit 限流不是限制并发量,而是限制请求的频率,比如一分钟可以处理10个,但是可能10个都是第一秒请求,就需要进行限制。可以通过token实现Trapsgolang都是传值的,slice 和 channel也是传值的,只不过复制了结构里面的指针上图,第一个所有值都是一个,第二个才是正确的。上图,第一个 会导致其他的go routine 泄露,因为用的无原创 2021-01-17 18:07:47 · 223 阅读 · 0 评论 -
goland等待锁问题
问题描述:向后台发送了一个URL请求,竟然一直卡住,没有返回,就一直卡着问题分析定位:一开始还以为是网络,还是什么其它奇怪的原因,毕竟之前好好的。这里应该第一时间思考环境的变化,网络、程序版本、还是什么地方变化了。后来又试了好几次,发现还是一样,想到了将Pod的数目改成了2个,于是估计是等待锁或者死锁之类的。通过以下链接获取调试信息:curl “127.0.0.1:43411/debug/pprof/goroutine?debug=1” > 1.outcurl “127.0.0.1:原创 2020-11-01 17:21:52 · 802 阅读 · 0 评论 -
golang 调试
golang 调试debug 接口的方式适用于 集成测试 ,因为测试用例和目标服务不在同一个进程里,需要 dump 目标进程的 goroutine stack 来获取泄漏信息。goroutine stack 通常第一行包含着 Goroutine ID,接下来的几行是具体的调用栈信息。有了调用栈信息,我们就可以通过 关键字匹配 的方式来检索是否存在泄漏的情况了。获取调试信息数据找到go pprof对应的端口: "prof": "17020", docker下的映射: 0.0.0.0:43785-原创 2020-11-01 17:15:57 · 637 阅读 · 0 评论 -
go语言接口与duckTyping
go语言接口与duckTyping何为duck Typing个人通俗解释:不同于类的界门纲目科属种,这种才是鸭子;而是凡是具有鸭子的功能,那就可以认为其是鸭子。结合代码层面大概是:并非得继承接口(并非一定是鸭科,河鸭属),而是一个sruct只要实现了里面的方法,就可以用这个接口进行调用(就是鸭子了)非常简单的代码func main(){ var bbb BBB bbb = AAA{123} // 这里对于cesGGG()无所谓AAA实现其他的,只要实现了需要的接口就可以调用,亦原创 2020-05-19 18:18:37 · 839 阅读 · 0 评论 -
GoLand Test framwork quit unexpectedly
莫名遇到GoLand Test framwork quit unexpectedly问题,如下图,在目录下,使用go test .可以 ;百度无果,后发现文件夹命名导致冲突:(t *testing.T) ,和testing重名。以及在编译器出问题时,可以用命令试一下。...原创 2020-05-18 18:48:35 · 1908 阅读 · 0 评论