Go 泛型编程: interface 不再是那个 interface 2022年3月27日 | Go 原文链接:https://colobu.com/2022/01/08/the-interface-is-not-that-interface-in-go-1-18/ 自 Go 1.18 支持泛型后, Go interface 的意义已经彻彻…… 阅读全文
Go 泛型编程:泛型设计 2022年3月27日 | Go 原文链接:https://golang3.eddycjy.com/posts/generics/ 引言 Go1.18 的泛型是闹得沸沸扬扬,如今已经基本成型,就由煎鱼带大家一起摸透 Go 泛型。 本文内容主要涉及泛型的 3 大设…… 阅读全文
Kratos 源码分析(一)|日志组件设计与实现 2022年1月10日 | Kratos 本文基于 kratos v2.1.3 设计理念 为了方便使用,Kratos 定义了两个层面的抽象,Logger 统一了日志的接入方式,Helper 接口统一的日志库的调用方式。 在不同的公司、使用不同的基础架构,可能对日志的打印方式、格…… 阅读全文
如何获取Go服务依赖包 2021年4月28日 | Go 在服务治理中,我们有时需要统计业务方服务的依赖包版本号使用情况,以便进行升级和版本兼容,通过 Go 官方提供的 debug.ReadBuildInfo 可以很方便的实现。 debug.ReadBuildInfo ReadBuildInfo 是 Go 标准库提供的方法,通过该方法可以读取打包程序的构建信息,里面就包括我…… 阅读全文
Go1.16新特性|标准库和其他变化 2021年3月10日 | Go 支持静态资源嵌入 参见之前的文章:Go1.16新特性|embed静态资源嵌入 新增 io/fs 的支持 Go 1.16 标准库新增 io/fs 包,并定义了一个 fs.File 接口用于表示一个只读文件树 (tree of file) 的抽象。 io/fs 包的两个最重要的接口如下: 1 2 3 4 5 6…… 阅读全文
Go1.16新特性|Module功能新变化 2021年3月10日 | Go Module 功能默认开启 在 Go 1.16 版本中,Go module-aware 模式成为了默认模式 (另一种则是传统的 gopath 模式)。module-aware 模式成为默认意味着什么呢?意味着 GO111MODULE 的值默认为 on 了。 这里将 Go 1.13 版本之前、Go 1.13 版本以及 Go 1.16 版本在 GO111MODULE…… 阅读全文
Go1.16新特性|embed静态资源嵌入[转] 2021年2月21日 | Go 本文转自:https://colobu.com/2021/01/17/go-embed-tutorial/,并稍作修改。 Go 编译的程序非常适合部署,如果没有通过 CGO 引用其它的库的话,我们一般编译出来的可执…… 阅读全文
[转]Go语言如何使用条件编译 2020年12月17日 | Go 当开发需要依赖底层平台或处理器体系特性的Go包时,提供对应的特定实现是非常有必要的。 Go没有预处理,没有宏定义系统,不可以像c语言那样使用#define来控制是否包含平台相关的特定代码。作为替代,Go…… 阅读全文
Go源码阅读 | channel 设计与实现 2020年8月25日 | Go 本文基于 Go1.14 源码阅读 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91…… 阅读全文
Go源码阅读 | context.Context设计与实现 2020年7月12日 | Go 本文基于 Go1.14.2 Go 自带的 context 包设计的很巧妙,最近阅读了下源码实现,可谓是短小精悍,很值得投入时间去学习。 什么是 context Go1.7 开始引入的 context 标准库包,主要用来在协程之间传递上下文信息,包括:取消信号、超时控制、截止时间、k…… 阅读全文