Go Fiber 框架系列教程 04:测试应用

大家好,我是 polarisxu。 实际项目中,大家经常不会对 Web API 写单元测试。Go 标准库不仅有 testing 包支持普通单元测试,还有 net/http/httptest 包支持 HTTP 的测试。 本文虽然是测试 Fiber 应用程序,但对其他的框架也适用。 01 如何测试 Web API 的单元测试如何进行? 本节介绍的测试方法主要是验证请求返回的 HTTP 状态码是否符合预期。 如果返回的状态码是 200 OK,那么表示这个测试用例成功(Pass),如果返回的状态码是 404

Go Fiber 框架系列教程 03:中间件

大家好,我是 polarisxu。 Middleware(中间件) 是一个 Web 框架重要的组成部分,通过这种模式,可以方便的扩展框架的功能。目前 Go Web 框架都提供了 Middleware 的功能,也有众多可用的 Middleware。 Fiber 也是如此,官方提供了众多的 Middleware,方便用户直接使用。本文先看看 Fiber 中 Middleware 的定义,然后介绍 Fiber 中的几个 Middleware,最后自己实现一个 Middlewa

Go泛型系列:提前掌握Go泛型的基本使用

泛型,是 Go 语言多年来最令人兴奋和根本性的变化之一。没有泛型,很多人以此「鄙视」Go 语言。当然,也有人觉得根本不需要泛型。有泛型,不代表你一定要用。平心而论,有些场景下,泛型还是很有必要和帮助的。 现在已经确认,Go1.18 正式包含泛型(Go1.17 已经可以试用,只是默认不支持,见之前的文章:扬眉吐气:刚刚,Go 已经默认支持泛型了 )。 不过,不少人对泛型还是迷迷糊

推荐一个 Go GUI 实战项目

大家好,我是 polarisxu。 一直以来,挺多人想尝试 Go GUI 项目的,经过这些年的发展,响应的方案也挺多的,有原生的、有基于 Web 的。其中,fyne 这个 Go GUI 框架,发展比较好。之前写过一篇文章:Go 真的也可以进行 GUI 开发:还有这样的图书呢 。 今天推荐一个开源 Go GUI 项目:wormhole-gui,项目地址:https://github.com/Jacalz/wormhole-

Go Fiber 框架系列教程 02:详解相关 API 的使用

大家好,我是 polarisxu。 该系列第一篇文章发出后,大家褒贬不一,很正常。选什么,不选什么,大家自己评估,没有什么是最好的。我这个系列,更多只是让大家对 Fiber 有些了解,说不定正好合你胃口呢? 前面对 Fiber 有了大概的印象。今天着重较深入探讨 Fiber 相关功能。 先从 fiber.New 函数配置开始。 01 配置 大部分 Go 框架,获得实例的函数是不支持配置的,比如 Gin、Echo 等。但 Fiber 框架的 New 函数支持传

Go Fiber 框架系列教程 01: 和 Express 对比学习

大家好,我是 polarisxu。 每次发框架相关的文章,总有人提到 Go Fiber 框架。于是乎,学习了下 Fiber,感觉确实挺不错的。因此写下这个 Fiber 系列。 Fiber 项目地址:https://github.com/gofiber/fiber ,目前 Star 数 15.3k+。 01 Fiber 框架 这是一个 Go 语言 Web 框架,启发自 NodeJS 框架:Express 。该框架基于 FastHTTP 构建,旨在简化、零内存分配和提高性能,以便快速开

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