Web Analytics

Go语言之父的反思:我们做对了什么,做错了什么

本文永久链接 – https://tonybai.com/2024/01/07/what-we-got-right-what-we-got-wrong 在《2023年Go语言盘点:稳中求新,稳中求变》和《Go测试的20个实用建议》两篇文章中,我都提到过已经退居二线的Go语言之父Rob Pike在Go开源14周年的那天亲自在GopherCon Australia 2023上发表了“What We Got Right, What We Got Wrong”的主题演讲来回顾Go诞生以来的得与失。近期Rob Pike终于将这次演进的文字稿发布了出来!GopherCon Australia也在油管上发布了这个演进的视频。Rob Pike的观点对所有Gopher都是极具参考价值的,因此在这篇博文中,我将Rob Pike的这次演讲稿翻译成中文,供大家参考(结合文字稿和视频),我们一起来领略和学习大师的观点。 ...

January 7, 2024 · 24 min · Tony Bai

小厂内部私有Go module拉取方案

本文永久链接 – https://tonybai.com/2021/09/03/the-approach-to-go-get-private-go-module-in-house 1. 问题来由 Go 1.11版本引入Go module后,Go命令拉取依赖的公共go module不再是“痛点”。如下图所示: 图:从公司内部经由公共GOPROXY服务拉取公共go module ...

September 3, 2021 · 13 min · Tony Bai

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

辛丑牛年初七开工大吉的日子(2021.2.18),Go核心开发团队为中国Gopher们献上了大礼 – Go 1.16版本正式发布了!国内Gopher可以在Go中国官网上下载到Go 1.16在各个平台的安装包: ...

February 25, 2021 · 24 min · Tony Bai

没有VPS搭建govanityurls服务?别急!你依然可以自定义Go包导入路径

我们见到的Go包的导入路径常常以github.com、bitbucket.org等代码托管站点的域名为前缀,这样的包导入路径有一个问题,那就是当Go包的托管站点发生变更时(比如从github.om迁移到bitbucket.org或gitlab.com),该包的使用者需要更新包的导入路径。当然,在支持go module+GOPROXY的情况下,如果使用者不再升级包版本,他/她完全可以继续使用原包导入路径,但这仅是特例。 还有一些包的导入路径并非以知名代码托管站点域名作为前缀,比如:Go官方扩展包text,它的包导入路径是golang.org/x/text,这种包导入路径被称为vanity import path,字面义是虚荣心导入路径,即以个人或组织官方域名作为前缀的包导入路径。采用vanity import path的包避免了包迁移对包使用者的影响。包使用者完全无需关心包的实际存储位置是在github上还是在bitbucket上或是私有服务器上。同时将vanity import path作为包的权威路径(canonical import path),也方便go get等对包权威路径的检查,避免包路径变更的前后不一致。 ...

November 15, 2020 · 7 min · Tony Bai

图解git原理的几个关键概念

git是那个“爱骂人”的Linux之父Linus Torvalds继Linux内核后奉献给全世界程序员的第二个礼物(不能确定已经逐渐老去的Torvalds能否迸发第三春,第三次给我们一个超大惊喜^_^)。这里再强调一下,git读作**/git/,而不是/dʒit/**。 ...

April 7, 2020 · 15 min · Tony Bai

使用git操作svn仓库

如今,虽然Git已经大行其道,但是仍有很多IT公司和组织依旧在使用集中式的版本控制系统subversion,尤其是一些传统软件公司,他们倾向于集中式的联网开发。如果你是一个Git fans,并且你要是遇到代码仓库依旧是使用subversion进行版本控制的情况,你又该如何施展呢? 其实git很早就支持与subversion repo的互操作了,2011年我就曾写过一篇《小试git-svn》的博文,也正是那一年,我第一次使用git操作subversion仓库。 《小试git-svn》一文仅是通过文字性描述简要说明了git操作svn repo的基本命令和功能,并未结合实际例子,也缺少直观的图片展示,并且未涉及branch和tag的操作。这里打算再写一篇关于使用git操作svn仓库的文章,相比于前者,我期望该文能更为系统并结合demo图文并茂的把使用git操作svn仓库这个事情讲的更形象和透彻一些。 ...

June 25, 2019 · 9 min · Tony Bai

也谈Commit log

在版本控制工具大行其道的今天,作为程序员,势必要每天与各种版本控制系统(比如Subversion、Git、Mercurial等)打交道, 每天不commit几次代码都不好意思说自己是专业程序员^_^。不过commit代码可不止敲入commit命令这么简单,对于一个专业程序员 来说,我们还要关注每次commit所携带的背景信息,这里暂且称之为“commit context”。在每次commit时,这些上下文信息只能通过commit log来体现。 ...

May 9, 2013 · 9 min · Tony Bai

SVN命令输出结果的语言选择

今天一位网上的朋友在使用reviewboard时遇到了问题,我们在评论中探讨了一下。他的问题目前已经定位,大致是这样的:他在Windows上用svn diff生成的patch文件在提交给reviewboard时出错,但在linux上生成的patch文件是没有问题的。后来他发现这两个patch文件内容稍有区别:Windows上的patch文件中的diff结果包含中文,比如“版本 10”;而在linux下生成的那份patch文件中,“版本 10"变成了"revision 10”。reviewboard拒绝了带中文的那份patch,估计是reviewboard的字符编码设置让其无法识别windows下的那个字符集。 ...

March 15, 2013 · 3 min · Tony Bai

也谈Go语言代码包分发

Go语言目前(截至1.0.2版本)尚不支持直接链接.a文件(这里的.a文件指的不是传统静态共享库,而是对golang的非main包build后的产物)。这样一来Go的第三方库包或组织内部的公共代码库包只能以源码的形式分发了。 Go提供了get命令用于获取他人分发的代码包。我们通过get命令既可以获取一些知名代码托管站点上的代码,也可以获取组织内部版本控制服务器上的公共代码。 ...

October 25, 2012 · 3 min · Tony Bai