Go Module:私有不合规库怎么解决引用问题

大家好,我是 polarisxu。 有一个朋友咨询一个问题: 实际项目中,使用 Go Module 难免会有一些自己的库要引用,这些库使用自建的 Git 服务管理,比如 GitLab 等。针对这样的情况,不少教程都是让设置 GOPRIVATE,即不走 GOPROXY。 然而,有些时候,不仅库是私有的,而且地址很可能不是「合规」的。什么是「不合规」的? 不是 HTTPS 非 443 或 80 端口 直接使用 IP 地址 不是 HTTPS 问题不大,主要是非 443 或

Go1.17 新特性:go get 变了

大家好,我是 polarisxu。 为什么把 Go 的一些小变化单独写文章,而不是一篇文章介绍所有的变化?主要是想让大家对某一个特性有更深的记忆。全部列出,很容易一眼而过,过段时间就忘记了。但一个变化,专门一篇文章介绍,更容易记住。 01 安装命令会警告 一直以来,go get 用于下载并安装 Go 包、命令等,而 go install 在 module 时代几乎很少使用,在 GOPATH 年代,go install 用来编译安装本地项目。 自 1.16 起,官方

Go1.17 新特性:testing 包的相关变化

大家好,我是 polarisxu。 今天介绍下 Go1.17 中的特性:testing 包的一些变化。先看 Release Notes 关于 testing 变化的描述: Added a new testing flag -shuffle which controls the execution order of tests and benchmarks. The new T.Setenv and B.Setenv methods support setting an environment variable for the duration of the test or benchmark. 关于 shuffle 这个 flag,1.17 还未发布时,我就写过文章介绍:Go1.17这个新特性竟然是6年前提出来的 。关于它的作用,记住关键一点:我们写测试时,测试之间别相互依赖,应该是独立的。 本文着

StackOverflow 上关于 Go select 死锁的问题

大家好,我是 polarisxu。 前两天,火丁笔记发了一篇文章:《一个 select 死锁问题》 ,又是一个小细节。我将其中的问题改一下,更好理解: package main import "sync" func main() { var wg sync.WaitGroup foo := make(chan int) bar := make(chan int) wg.Add(1) go func() { defer wg.Done() select { case foo <- <-bar: default: println("default") } }() wg.Wait() } 按常规理解,go func 中的 select 应该执行 default 分支,程序正常运行。但结果却不是,而是死锁。可以通过该链接测试:https://play.studygolang.com/p

新书推荐:用 Gin 框架构建分布式应用

大家好,我是 polarisxu。 有段时间没推荐新书了。最近看到一本书《Building Distributed Applications in Gin》,本书是学习如何使用 Gin 中的各种功能构建大规模分布式应用程序的有效指南。出版日期:2021 年 7 月 23 日,英文版(目前肯定没有中文版)。购买地址:https://www.packtpub.com/web-development/building-distribute

Go 官网要变天。。。

大家好,我是 polarisxu。 Golang 官网,有些人可能从来没有访问过,因为国内一般访问不了。但我经常和「它」打交道,因为 Go 语言中文网很早就对 Go 官网做了一个镜像。最近 Go1.17 发布了,利用周末,我把 Go 官网镜像升级了下,但折腾了很久。。。发现 Go 官网要「变天」了! 之前写过一篇文章:《回顾 Go 官网的演变史》 ,没看的可以看看。 01 这次又变了 如果你访问了 Go 官网(golang.org),

Gin 这是要成为 Go 官方框架?

大家好,我是 polarisxu。 常浏览 Go 官方网站的朋友可能留意到,Go 网站近一段时间增加了不少文档、教程。可能官方意识到,Go 被越来越多的用于 API 开发,于是近期又出了一个这方面的教程:《Tutorial: Developing a RESTful API with Go and Gin》 。 是的,基于 Gin 框架。在众多框架中,Go 官方选择了 Gin 框架,可见这个框架的受欢迎程度。 这份官方的教程包含以下几个方面: 设计 API 接口:以一个虚拟

扬眉吐气:刚刚,Go 已经默认支持泛型了

大家好,我是 polarisxu。 上周 Go 1.17 发布,在发布文档中,没有提到泛型的事情。但在发布之前,大家就发现,泛型的相关代码在 1.17 中埋下了,只是默认不启用。 就在最近,gotip 已经默认启用泛型。Go 泛型官方叫做:type parameters。 -G 的默认值由 0 改为了 3,那 Go 1.17 有没有这个 flag? 01 Go1.17 启用泛型支持 安装 Go1.17,推荐使用类似 goup 这样的工具,方便切换版本,

Go 1.17 新特性:Module 有哪些变化?

大家好,我是 polarisxu。 自从 Go1.11 增加 Go Module 以来,每个版本都在不断改进 Module。Go1.17 也不例外。这次最主要的变化有两点: Module graph pruning:Module 依赖图修剪 Lazy Loading:Module 延迟加载 此外还有 Deprecated 注释等。本文就一起探究下这些新变化,因为有人没看懂,不知道这些变化是什么意思。 01 Module 依赖图修剪 要搞懂这个知识点,需要对比 1.17 之前的情况。 注意,

Go 第三方库推荐:类型转换如此简单

大家好,我是 polarisxu。 强类型语言有它的优势,但也有不便利的地方,最典型的就是类型转换。Golang 作为一门强类型语言,而且不支持隐式类型转换,因此这个问题更突出。虽然 Go 提供了不少方式进行类型转换,包括相关的标准库,比如 strconv 包。 然而,strconv 包使用没那么方便,比如 "8" 转为 int 类型: s := "8" i, err := strconv.Atoi(s) 你必须对 err 进行处理,因为返回两个值,没法直接将结果传递给