202004-10 Go 中的 SetFinalizer 有什么用?怎么实现的? HOT 这篇文章基于 Go-1.12 版本 Go runtime 提供了一种允许开发者将一个函数与一个变量绑定的方法 runtime.SetFinalizer,被绑定的变量从它无法被访问时就被垃圾回收器视为待回收状态。这个特性引起了高度的争论,但本文并不打算参与其中,而是去阐述这个方法的具体实现。 继续阅读 >
202003-28 如何用golang实现一个定时器任务队列 HOT golang中提供了2种定时器timer和ticker(如果JS很熟悉的话应该会很了解),分别是一次性定时器和重复任务定时器。 继续阅读 >
202003-27 优雅地关闭或重启 go web 项目 HOT 我们编写的Web项目部署之后,经常会因为需要进行配置变更或功能迭代而重启服务,单纯的kill -9 pid的方式会强制关闭进程,这样就会导致服务端当前正在处理的请求失败,那有没有更优雅的方式来实现关机或重启呢? 继续阅读 >
202003-27 Go官方的限流器 time/rate 如何使用(一) HOT 本主题为系列文章,分上下两篇。本文主要介绍time/rate的具体使用方法,下一篇文章将会着重介绍其内部实现原理。 继续阅读 >
202003-27 Go 1.14中值得关注的几个变化 HOT Go 1.14的详细变更说明在这里可以查看。整个版本的milestone对应的issue集合在这里。 不过目前Go 1.14在特定版本linux内核上会出现crash的问题,当然这个问题源于这些内核的一个已知bug。在这个issue中有关于这个问题的详细说明,涉及到的Linux内核版本包括:5.2.x, 5.3.0-5.3.14, 5.4.0-5.4.1。本篇博客涉及的代码在这里可以下载。 继续阅读 >
202003-27 Go 常量学习-可视化指南 HOT 一个常量只能在它的声明的作用域内使用。如果你在更内部的作用域内以同样的名字再声明一个常量,那么这个常量仅仅在内部作用域内可以使用,并且在此作用域内将覆盖外部声明的常量。 继续阅读 >
202003-26 学习 Go 协程:详解信道/通道 HOT goroutine 是 Go语言程序的并发执行的基本单元,多个 goroutine 的通信是需要依赖本文的主人公 —— channel 。channel,中文翻译有叫通道,也有叫信道的。以下为了方便,我统一称之为 信道 。 信道,就是一个管道,连接多个goroutine程序 ,它是一种队列式的数据结构,遵循先入先出的规则。 继续阅读 >
202003-26 方便结构体和 map 赋值 HOT 今天我们介绍一个合并结构体字段的库mergo。mergo可以在相同的结构体或map之间赋值,可以将结构体的字段赋值到map中,可以将map的值赋值给结构体的字段。 继续阅读 >
202003-26 在 Gin 框架中使用 JWT 认证 HOT JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0认证的业务场景下。 继续阅读 >
202003-26 分析标准库和优秀项目的接口:Go中接口应该这么定义 HOT 在 Go 语言中,接口定义了一套方法的集合,任何实现这些方法的对象都可以被认为实现了这个接口,这也称作Duck Type。这不像其它语言比如 java,需要预先声明类型实现了某个或者某些接口,这使得 Go 接口和类型变得很轻量级,它解耦了接口和具体实现的硬绑定。显然这是 Go 的开发者深思熟虑的一个决定。 继续阅读 >
202003-26 用Go构建不可变的数据结构 HOT 共享状态[1]是比较容易理解和使用的,但是可能产生隐晦以至于很难追踪的 bugs。尤其是在我们的数据结构只有部分是通过引用传递的。切片就是这么一个很好的例子。后续我会作出更加详细的讲解。 继续阅读 >
202003-17 2020 重学 Go 系列:08. 面向对象编程:结构体与继承 HOT 在之前学过的数据类型中,数组与切片,只能存储同一类型的变量。若要存储多个类型的变量,就需要用到结构体,它是将多个容易类型的命令变量组合在一起的聚合数据类型。 继续阅读 >
202003-17 2020 重学 Go 系列:09. 一篇文章理解 Go 里的函数 HOT 函数是基于功能或 逻辑进行封装的可复用的代码结构。将一段功能复杂、很长的一段代码封装成多个代码片段(即函数),有助于提高代码可读性和可维护性。 继续阅读 >
202003-17 2020 重学 Go 系列:10. Go语言流程控制:if-else 条件语句 HOT Go里的流程控制方法还是挺丰富,整理了下有如下这么多种: if - else 条件语句 switch - case 选择语句 for - range 循环语句 goto 无条件跳转语句 defer 延迟执行 继续阅读 >
202003-16 Micro In Action(三):调用服务 HOT 本文讨论了如何调用一个已经存在服务。 micro 提供了丰富的工具, 可以用来在运行时查看服务状态及调用服务方法。这其中既有命令行工具, 也有基于 web 界面工具。 最后,我们创建了一个客户端项目,用代码真正完成了服务的调用。 继续阅读 >
202003-12 使用 Go 和 LLVM 进行 Web Assembly 的高效前端开发 HOT 总的来说,我很高兴在我的工具箱中再添加一个工具来更加简单方便的创建 Web assembly。也许通过一些工作,tinygo 可以生成的更简洁,并像 Rust 一样在网络的下一个技术平台上坚实可靠。 继续阅读 >
202003-12 一个零 GC 的缓存库:freecache HOT 今天给大家推荐一个零 GC 开销、高并发性能的缓存库:FreeCache,项目地址:https://github.com/coocood/freecache,Star 数:2.5k+。 继续阅读 >
202003-12 Micro In Action(一):入门 HOT 这个系列聊一聊 Micro, 我们将以实际开发微服务为主线,顺带解析相关功能。从最基本的话题开始,逐步转到高级特性。 Micro 很强大,掌握后使用起来也相当便利。但它的演进速度非常快, 导致其文档有严重缺失和滞后。 很多功能没有文档;很多基本问题不得不去 GitHub 上提 issue 或去 Slack 里面问,又得不到什么反馈。最后, 查看源码成了唯一的学习途径。这对于使用者来说非常不友好,阻碍了 Micro 被更多人所采用。 继续阅读 >
202003-12 “网红” WebAssembly 与 K8s 如何实现双剑合璧? HOT WebAssembly 技术已经走出浏览器,让计算无处不在。本文利用 containerd 的扩展机制,可以为 WebAssembly 应用提供与其他容器应用一致的、抽象的、应用分发、交付和运维模型,可以在 Kubernetes 集群中进行统一调度和管理。 继续阅读 >
202003-11 Golang源码系列四:Interface实现原理分析 HOT 接口是一种抽象类型,它没有暴露所含数据的布局或者内部结构,当然也没有哪些数据的基本操作,所提供的仅仅是一些方法。当你拿到一个接口类型的变量,你无从知道它是什么,但你能知道它能做什么,或者更精确地讲,仅仅是它提供了哪些方法。 继续阅读 >
202003-11 Golang源码系列三:Channel实现原理分析 HOT channel可以在两个或者多个goroutine之间传递消息。在Go中,goroutine和channel是并发编程的两大基石,goroutine用来执行并发任务,channel用来在goroutine之间来传递消息。 继续阅读 >