Web Analytics

聊聊Go应用输出日志的工程实践

配图改自网络 本文永久链接 – https://tonybai.com/2022/03/05/go-logging-practice Go隶属于后端语言,以开发各类服务、中间件和系统平台见长。日常学习Go语言时,日志不是不可或缺的,甚至是无需考虑的,但是一旦到真正的Go的工程实践中,输出日志便是我们绕不过去的、必须面对的问题。 ...

March 5, 2022 · 11 min · Tony Bai

2021年博客回顾与总结

本文永久链接 – https://tonybai.com/2021/12/31/2021-blog-summary 2021年对我来说是极其充实的一年。 在这一年里,生活上的充实体现在带娃上。除了要带不到一岁的二宝,还要辅导大宝学习,陪大宝上补习班。 工作中,由于我刚入行智能网联汽车这个行业,要学的东西很多,要做的东西也很很多,要解决的问题同样很多,每天都十分忙碌。 ...

December 31, 2021 · 4 min · Tony Bai

Ian Lance Taylor:Go泛型使用的一般准则

本文永久链接 – https://tonybai.com/2021/11/07/using-generics-in-go 在近期Google Open Source Live的Go Day 2021环节,Go泛型的主要设计者Ian Lance Taylor做了Using Generics in Go的简短演讲(国内地址在这里)。这篇演讲的重点不是即将于Go 1.18版本降临的Go泛型的语法细节,而是介绍目前Go核心团队在设计、实现以及内部实践Go泛型的过程中积累的一些实践经验。Ian将这些经验总结成了这么一段小视频,旨在Go泛型落地之前,为Go社区提供一些Go泛型使用的通用指导原则。这里将演讲内容整理出来,供大家参考。 ...

November 7, 2021 · 11 min · Tony Bai

Go 1.18对泛型的支持策略

本文永久链接 – https://tonybai.com/2021/10/28/expectations-for-generics-in-go-1.18 2021年10月中旬,Go语言之父Rob Pike在github上的Go项目中发了一条issue:建议不在Go 1.18的标准库中使用泛型。 不得不说“姜还是老的辣”!Rob Pike的理由很简单,Go泛型是Go诞生以来最大的一次语言变化,Go 1.18版本承载了太多的change,容易出错。并且Go核心开发团队也没有使用新泛型的经验,他建议Go核心开发团队应该多等待、观察和学习。我是十分赞同Rob Pike的建议的,不要把步子迈得太大。Go应该按照自己的节奏稳步前进。 ...

October 28, 2021 · 6 min · Tony Bai

Go 1.17中值得关注的几个变化

本文永久链接 – https://tonybai.com/2021/08/17/some-changes-in-go-1-17 Go核心开发团队在去年GopherCon大会上给Go泛型的定调是在2022年2月份的Go 1.18版本中发布,那可是自Go诞生以来语法规范变动最大的一次,这让包括笔者在内的全世界的Gopher们都满怀期待。 不过别忘了,在Go 1.18这个“网红版本”发布前,还有一个“实力派”版本Go 1.17呢!美国当地时间2021年8月16日,Go 1.17版本在经过两个RC版本之后正式发布!并且值得庆幸的是Go 1.17版本并没有过多受到Go 1.18版本这个“网红”的影响,Go 1.17默默地加入和优化了着实不少的特性。在这一篇文章中,我们就来看看Go 1.17版本中有哪些值得关注的变化。 ...

August 17, 2021 · 8 min · Tony Bai

一文告诉你如何用好uber开源的zap日志库

本文永久链接 – https://tonybai.com/2021/07/14/uber-zap-advanced-usage 1. 引子 日志在后端系统中有着重要的地位,通过日志不仅可以直观看到程序的当前运行状态,更重要的是日志可以在程序发生问题时为开发人员提供线索。 ...

July 14, 2021 · 16 min · Tony Bai

Go标准库http与fasthttp服务端性能比较

本文永久链接 – https://tonybai.com/2021/04/25/server-side-performance-nethttp-vs-fasthttp 1. 背景 Go初学者学习Go时,在编写了经典的“hello, world”程序之后,可能会迫不及待的体验一下Go强大的标准库,比如:用几行代码写一个像下面示例这样拥有完整功能的web server: ...

April 25, 2021 · 11 min · Tony Bai

使用reflect包在反射世界里读写各类型变量

本文永久链接 – https://tonybai.com/2021/mm/dd/variable-operation-using-reflection-in-go Go在标准库中提供的reflect包让Go程序具备运行时的反射能力(reflection),但这种反射能力也是一把“双刃剑”,它在解决一类特定问题方面具有优势,但也带来了逻辑不清晰、性能问题以及难于发现问题和调试等不足。不过从Go诞生伊始就随着Go一起发布的reflect包是Go不可或缺的重要能力,不管你是否使用,都要掌握使用reflect与类型系统交互的基本方法,比如在反射的世界里如何读写各类型变量。本文就来和大家快速过一遍使用reflect包读写Go基本类型变量、复合类型变量的方法以及它们的应用。 1. 基本类型 进入reflect世界的大门主要有两个:reflect.ValueOf和reflect.TypeOf。进入到反射世界,每个变量都能找到一个与自己的对应的reflect.Value,通过该Value我们可以读写真实世界的变量信息。这里主要和大家过一遍操作各类型变量值的方法,因此主要用到的是reflect.ValueOf。 ...

April 19, 2021 · 10 min · Tony Bai

给expvarmon插上数据持久化的“翅膀”

本文永久链接 – https://tonybai.com/2021/04/14/expvarmon-save-and-convert-to-xlsx 1. expvar包与expvarmon Go在标准库中为暴露Go应用内部指标数据提供了标准的对外接口,这就是expvar包。expvar包通过init函数将内置的expvarHandler(一个标准http HandlerFunc)注册到http包ListenAndServe创建的默认Server上。 ...

April 14, 2021 · 11 min · Tony Bai

Go标准库flag包的“小陷阱”

本文永久链接 – https://tonybai.com/2021/04/12/pitfall-in-std-flag-pkg Go语言号称“自带电池(battery-included)”,这意味着Go标准库可开箱即用,为Gopher提供了功能丰富的常用工具包,足以应付多数日常开发所需。尤其在Go语言擅长的领域,Go标准库工具包更是有着广泛的应用。下图是Go官方2020年用户调查的结果: 我们看到cli(command-line interface)领域开发占据了Go语言应用的Top2位置,仅次于开发API/RPC服务。而普通cli应用的开发总是离不开标准库的flag包。 ...

April 12, 2021 · 5 min · Tony Bai