Go开发命令行程序指南

注:上面篇首配图的底图由百度文心一格生成。 本文永久链接 – https://tonybai.com/2023/03/25/the-guide-of-developing-cli-program-in-go 近期在Twitter上看到一个名为“Command Line Interface Guidelines”的站点,这个站点汇聚了帮助大家编写出更好命令行程序的哲学与指南。这份指南基于传统的Unix编程原则,又结合现代的情况进行了“与时俱进”的更新。之前我还真未就如何编写命令行交互程序做系统的梳理,在这篇文章中,我们就来结合clig这份指南,(可能不会全面覆盖)整理出一份使用Go语言编写CLI程序的指南,供大家参考。 ...

March 25, 2023 · 28 min · Tony Bai

聊聊Go语言的全局变量

本文永久链接 – https://tonybai.com/2023/03/22/global-variable-in-go 注:上面篇首配图的底图由百度文心一格生成。 C语言是Go语言的先祖之一,Go继承了很多C语言的语法与表达方式,这其中就包含了全局变量,虽然Go在其语法规范中并没有直接给出全局变量的定义。但是已经入门Go的童鞋都知道,在Go中包的导出变量(exported variable)起到的就是全局变量的作用。Go包导出变量与C的全局变量在优缺点与使用方式也有相似之处。 ...

March 22, 2023 · 10 min · Tony Bai

使用viper实现yaml配置文件的合并

本文永久链接 – https://tonybai.com/2022/09/20/use-viper-to-do-merge-of-yml-configuration-files 作为小厂,我们的基础设施还不够完备,项目经理中秋节通知我们的系统近期要上second-to-last stage环境和生产环境,于是从运维人员部署效率方面考量,我们紧急开发了一个一键安装脚本生成工具,这样运维人员便可以利用该工具结合实际目标环境生成一键安装脚本。这个工具的原理十分简单,如下示意图所示: ...

September 20, 2022 · 10 min · Tony Bai

如何像gitlab-runner那样将Go应用安装为系统服务

本文永久链接 – https://tonybai.com/2022/09/12/how-to-install-a-go-app-as-a-system-service-like-gitlab-runner 在《让reviewdog支持gitlab-push-commit,守住代码质量下限》一文中,gitlab-runner(一个Go语言开发的应用)通过自身提供的install命令将自己安装为了一个系统服务(如下面步骤): # Create a GitLab CI user sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash # Install and run as service sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner sudo gitlab-runner start 在主流新版linux上(其他os或linux上的旧版守护服务管理器如sysvinit、upstart等,我们暂不care),系统服务就是由systemd管理的daemon process(守护进程)。 ...

September 12, 2022 · 10 min · Tony Bai

Go 1.19新特性前瞻

本文永久链接 – https://tonybai.com/2022/06/12/go-1-19-foresight 美国时间2022年5月7日,Go 1.19版本开发分支进入新特性冻结(freeze)阶段,即只能修Bug,不能再向Go 1.19版本中增加新特性了。由于上一个版本Go 1.18因引入泛型改动较大,推迟了一个月发布,这直接导致了Go 1.19版本的开发周期被缩短。 ...

June 12, 2022 · 8 min · Tony Bai

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

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

March 5, 2022 · 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

写Go代码时遇到的那些问题[第1期]

程序员步入“大龄”,写代码的节奏也会受到影响。以前是长时间持续地写,现在写代码的节奏变成了“波浪形”:即写一段时间,歇一段时间。当然这里的“歇”并不是真的歇,而是做其他事情了,比如:回顾、整理与总结。 ...

January 13, 2018 · 15 min · Tony Bai

Golang程序配置方案小结

在Twitter上看到一篇关于Golang程序配置方案总结的系列文章(一个mini series,共6篇),原文链接:在这里。我觉得不错,这里粗略整理(非全文翻译)一下,供大家参考。 一、背景 无论使用任何编程语言开发应用,都离不开配置数据。配置数据提供的形式有多样,不外乎命令行选项(options)、参数(parameters),环境 变量(env vars)以及配置文件等。Golang也不例外。Golang内置flag标准库,可以用来支持部分命令行选项和参数的解析;Golang通过os包提 供的方法可以获取当前环境变量;但Golang没有规定标准配置文件格式(虽说内置支持xml、json),多通过第三方 包来解决配置文件读取的问题。Golang配置相关的第三方包邮很多,作者在本文中给出的配置方案中就包含了主流的第三方配置数据操作包。 ...

July 1, 2015 · 10 min · Tony Bai