Go随笔

收录了 14 篇文章 · 0 人关注

  • 看看这篇拯救发际线的干货吧--警惕 Go 编程陷阱

    在2019年08月17日举办的 Gopher Meetup(深圳站)活动上,来自 Bindo Labs 公司的李雄飞进行了 《Go 编程陷阱》的演讲。李雄飞,Bindo Labs 后端技术负责人,全栈工程师。从事POS/支付业务架构以及通用Web系统建设工作,主要关注New SQL/ETL/Kubernetes等领域技术发展。以下为演讲实录。前言我大概是从 2015 年开始写下第一行 Go 代码,今天主要给大家分享我这几年以来所积累的一些让我非常难受地方以及感到崩溃的一些 BUG,我希望我的这些...

  • 如何在 Golang API 中避免内存泄漏?

    关注公众号:JongSunShine 获取更多资料 建议你在将Golang API投入生成之前阅读此文,此文是基于真实的线上问题修复经历,如有巧合,纯属踩雷! 几个星期前,在修复我们的主服务器的漏洞时,我们尝试了很多方法来调试和修复它,因为它已经投入生产几个星期了。 但是我们总是需要通过我们的自动缩放机制来缓解,使其看起来似乎一切正常。直到后来我们才明白,这是coding中出现了问题。01 架构 我们在整个系统架构中使用了微服务模式。 有一个网关 API (我们称之为主 API )为我们的用户(...

  • Channel使用技巧

    [原文地址](https://bingjian-zhu.github.io/2019/09/25/channel%E4%BD%BF%E7%94%A8%E6%8A%80%E5%B7%A7/) #### 前言 Go协程一般使用channel(通道)通信从而协调/同步他们的工作。合理利用Go协程和channel能帮助我们大大提高程序的性能。本文将介绍一些使用channel的场景及技巧 #### 场景一,使用channel返回运算结果 计算斐波那契数列,在学习递归时候这是个经典问题。现在我们...

  • Golang <-time.After()在计时器过期前不会被垃圾回收

    最近我在调查 Go 应用程序中内存泄漏的问题,这个问题主要因为我没有正确的阅读文档。这是一段导致消耗了多个 Gbs 内存的代码: ```go func ProcessChannelMessages(ctx context.Context, in <-chan string, idleCounter prometheus.Counter) { for { start := time.Now() select { case s, ok := <-in: if !...

  • RabbitMQ教程(译)-RPC

    [原文地址:https://bingjian-zhu.github.io/2019/09/01/RabbitMQ%E6%95%99%E7%A8%8B%EF%BC%88%E8%AF%91%EF%BC%89-RPC/](https://bingjian-zhu.github.io/2019/09/01/RabbitMQ%E6%95%99%E7%A8%8B%EF%BC%88%E8%AF%91%EF%BC%89-RPC/) ## 远程过程调用(RPC) **(使用Go客户端)** <!--...

  • RabbitMQ教程(译)-Topics

    [原文地址:https://bingjian-zhu.github.io/2019/09/01/RabbitMQ%E6%95%99%E7%A8%8B%EF%BC%88%E8%AF%91%EF%BC%89-Topics/](https://bingjian-zhu.github.io/2019/09/01/RabbitMQ%E6%95%99%E7%A8%8B%EF%BC%88%E8%AF%91%EF%BC%89-Topics/) ## 为什么需要topic交换机? **(使用Go客户端)*...

  • RabbitMQ教程(译)-Routing

    [原文链接:https://bingjian-zhu.github.io/2019/09/01/RabbitMQ%E6%95%99%E7%A8%8B%EF%BC%88%E8%AF%91%EF%BC%89-Routing/](https://bingjian-zhu.github.io/2019/09/01/RabbitMQ%E6%95%99%E7%A8%8B%EF%BC%88%E8%AF%91%EF%BC%89-Routing/) ## 路由(Routing) **(使用Go客户端)**...

  • RabbitMQ教程(译)-Publish/Subscribe

    ## 发布/订阅 **(使用Go客户端)** <!--more--> 在[上篇教程](https://bingjian-zhu.github.io/2019/09/01/RabbitMQ%E6%95%99%E7%A8%8B%EF%BC%88%E8%AF%91%EF%BC%89-Work-queues/)中,我们搭建了一个工作队列,每个任务只分发给一个工作者(worker)。在本篇教程中,我们要做的跟之前完全不一样 —— 分发一个消息给多个消费者(consumers)。这种模式被...

  • RabbitMQ教程(译)-Work queues

    [原文地址:https://bingjian-zhu.github.io/2019/09/01/RabbitMQ%E6%95%99%E7%A8%8B%EF%BC%88%E8%AF%91%EF%BC%89-Work-queues/](https://bingjian-zhu.github.io/2019/09/01/RabbitMQ%E6%95%99%E7%A8%8B%EF%BC%88%E8%AF%91%EF%BC%89-Work-queues/) ## 工作队列 **(使用Go客户端)*...

  • RabbitMQ教程(译)-Hello World

    ## 前提条件 > 本教程假设RabbitMQ已经安装在你本机的 (5672)端口。如果你使用了不同的主机、端口或者凭证,连接设置就需要作出一些对应的调整。 <!--more--> ## 介绍 RabbitMQ是一个消息代理。它的工作就是接收和转发消息。你可以把它想像成一个邮局:你把信件放入邮箱,邮递员就会把信件投递到你的收件人处。在这个比喻中,RabbitMQ就扮演着邮箱、邮局以及邮递员的角色。 RabbitMQ和邮局的主要区别在于,它处理纸张,而是接收、存储和发送消息(...

  • gin-jwt对API进行权限控制

    ### 前言 之前文章简单介绍了如何运行[gin+vue的前后端分离开源项目](https://bingjian-zhu.github.io/2019/08/27/gin+vue%E7%9A%84%E5%89%8D%E5%90%8E%E7%AB%AF%E5%88%86%E7%A6%BB%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE/),该项目是学习了[Gin实践教程](https://github.com/EDDYCJY/go-gin-example/blob/mas...

  • 弄懂goroutine调度原理

    [原文地址:https://bingjian-zhu.github.io/2019/09/12/%E5%BC%84%E6%87%82goroutine%E8%B0%83%E5%BA%A6%E5%8E%9F%E7%90%86/](https://bingjian-zhu.github.io/2019/09/12/%E5%BC%84%E6%87%82goroutine%E8%B0%83%E5%BA%A6%E5%8E%9F%E7%90%86/) ### goroutine简介 >golang语...

  • 线程实现模型

    [原文地址:https://bingjian-zhu.github.io/2019/09/11/%E7%BA%BF%E7%A8%8B%E5%AE%9E%E7%8E%B0%E6%A8%A1%E5%9E%8B/](https://bingjian-zhu.github.io/2019/09/11/%E7%BA%BF%E7%A8%8B%E5%AE%9E%E7%8E%B0%E6%A8%A1%E5%9E%8B/) ### 线程实现模型 线程实现模型主要分为:`用户级线程模型`,`内核级线程模型`和`两...

  • golang的defer精析

    example1 func f() (result int) {      defer func() {          result++      }()      return 0 } example2 func f() (r int) {      t := 5      defer func() {          t = t + 5      }()      return t } example3 func f() (r int) {      defer func(r...