GO语言
文章平均质量分 55
haowunanhai
这个作者很懒,什么都没留下…
展开
-
服务端大量无效ESTABLISHED连接,是人性泯灭还是道德沦丧
2月末,微信群里突然收到监控告警,接口的无返回结果增多。nginx进行初步排查,发现请求内部服务A报了大量“连接失败”。我登录到服务器上看了下,服务A上的连接数超过了63000,应该是连接数太多导致的请求失败,重启服务后请求正常了,监控恢复。一周之后同样的问题再次出现。。。不得不深入排查下了。为什么连接数一直在增长?为什么其他集群没有这个问题?为什么以前没有问题?1. tcp连接的异常关闭导致服务端留下了大量ESTABLISHED状态的连接对比了服务A上和...原创 2022-03-17 21:39:05 · 7400 阅读 · 0 评论 -
Golang里的rune有什么用
rune是golang的一个内建类型,一直以来都没有存在感。直到我要处理中文才发现rune太有用了。先看下对普通字符串"hello, world"截断前两个字符,直接用切片截断或者转成byte再用切片截断都可以: str := "hello, world" fmt.Println(str[:2]) fmt.Println(string([]byte(str)[:2]))运行结果:$ go run test.gohehe再看下对中文字符串"虎年大吉"截断前两.原创 2022-01-27 22:00:52 · 969 阅读 · 0 评论 -
golang WaitGroup源码解析
上一篇学习了WaitGroup的用法,这篇学习下WaitGroup的机制。源码路径:$GOROOT/src/sync/waitgroup.goWaitGroup的总体机制是通过计数器记录被等待goroutine的数目,当goroutine退出后计数器会清零,同时通过信号量机制通知Wait函数解除阻塞。WaitGroup内部有两个计数器,可以称为v和w(借用源码里的计数器变量名),v记录了被等待的goroutine的数目,WaitGroup的Add()和Done()方法更新v的值;w记录了调用Wait()的原创 2020-11-26 00:06:23 · 392 阅读 · 0 评论 -
golang的WaitGroup解决了什么问题
设想这么一种场景,起多个goroutine同时去做事,等他们都做完了程序才能继续往下走。由于不同的goroutine完成工作的时间不同,怎么来等待他们都完成呢?sync包里的WaitGroup可以解决这个问题。示例如下:package mainimport ( "fmt" "sync" "time")var wg sync.WaitGroupfunc main() { fmt.Println("start", ...原创 2020-11-19 23:26:46 · 400 阅读 · 0 评论 -
Go语言web框架gin学习笔记1——最简web服务
一个基于gin的最简单的web服务可以3步写成:1. 创建默认gin实例2. 实现一个GET方法,只处理“/”3. 运行gin实例代码如下:package mainimport ( "github.com/gin-gonic/gin" "net/http")func main() { router := gin.Default() ...原创 2018-10-10 20:56:05 · 2210 阅读 · 0 评论 -
golang 如何将时间戳转成日期
最近需要分析文章的发布时间,就想将发布时间打印出来,可是发布时间是以unix时间戳(距离1970年的秒数)存储的,不直观。怎么转换成日期展示呢? 使用golang的time包可以方便的将unix时间戳转成日期。 第一种方式,使用time包里的Unix函数将时间戳转为time对象,直接将该time对象作为字符串打印即可。原理是time对象的Stri...原创 2019-05-05 19:04:44 · 12833 阅读 · 0 评论