函数调用源码剖析

前言 函数是 Go 语言的一等公民,掌握和理解函数的调用过程是我们深入学习 Go 无法跳过的,本节将从函数的调用惯例和参数传递方法两个方面分别介绍函数的执

interface和reflect源码剖析

interface Go 语言中的接口是一组方法的签名,它是 Go 语言的重要组成部分。使用接口能够让我们写出易于测试的代码,然而很多工程师对 Go 的接口了解都非常有限,也

基本原语panic和recover源码剖析

前言 本节将分析 Go 语言中两个经常成对出现的两个关键字 — panic 和 recover。这两个关键字与上一节提到的 defer 有紧密的联系,它们都是 Go 语言中的内置函数

基本原语defer源码剖析

前言 很多现代的编程语言中都有 defer 关键字,Go 语言的 defer 会在当前函数返回前执行传入的函数,它会经常被用于关闭文件描述符、关闭数据库连接以及解锁资源

基本原语make和new源码剖析

前言 当我们想要在 Go 语言中初始化一个结构时,可能会用到两个不同的关键字 — make 和 new。因为它们的功能相似,所以初学者可能会对这两个关键字的作用感

如何做CodeReview

前言 作为公司代码委员会 golang 分会的理事,我 review 了很多代码,看了很多别人的 review 评论。发现不少同学 code review 与写出好代码的水平有待提高。在这里,想分享一下我的

Go语言面向对象设计

Code review 在座的各位有谁把 code review 作为日常工作的一部分?【整个房间举起了手,鼓舞人心】。好的,为什么要进行 code review ?【有人高呼“阻止不良代码”】 如果代码审

Protobuf如何使用动态反射

反射 Reflection(反射)是新实现的旗舰特性。与 reflect 包提供 Go 类型和值的视图相似,protoreflect 包根据 protocol buffer 类型系统提供值的视图。

基本原语for和range源码剖析

汇编 循环是所有编程语言都有的控制结构,除了使用经典的三段式循环之外,Go 语言还引入了另一个关键字 range 帮助我们快速遍历数组、切片、哈希表以及 Channel 等

go-assert库介绍

初衷 今天要聊的库就是 github.com/huandu/go-assert,是我在几年前突发奇想实现的库。当时有一个「痒点」:写 Go 测试用例的

Go的深拷贝库:go-clone

背景 这个库是 github.com/huandu/go-clone,主要用途是对任意的 Go 结构进行深拷贝,创造一个内容完全相同的副本,得到的值可

自动dump库homles介绍

背景 Go 项目做的比较大(主要说代码多,参与人多)之后,可能会遇到类似下面这样的问题: 程序老是半夜崩,崩了以后就重启了,我也醒不来,现场早就丢了

Go应用为什么虚拟内存占用过高

前言 前段时间,某同学说某服务的容器因为超出内存限制,不断地重启,问我们是不是有内存泄露,赶紧排查,然后解决掉,省的出问题。我们大为震惊,赶紧

K8s的日志采集实践

Kubernetes中日志重要性 通常日志最基础的作用是记录程序的运行轨迹,在此之上会衍生出非常多的功能,例如线上监控、告警、运营分析、安全分

Go如何使用zstd压缩算法

zstd Zstandard是一种实时压缩算法,提供高压缩率。它提供了非常广泛的压缩/速度权衡,同时由非常快速的解码器提供支持。实现了高性能压缩算法

Linux的ln命令介绍

创建软链接 ln -s [源文件或目录] [目标文件或目录] 例如: 当前路径创建test 引向/var/www/test 文件夹 ln –s /var/www/test test 创建/var/tes

Go中如何实现hmac算法

首先来说说SHA1加密 SHA-1(英语:Secure Hash Algorithm 1,中文名:安全散列算法1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准