Go 周刊一览#1:1.22 增强 ServeMux 路由、新版本发布、新开源包等

大家好,我是煎鱼。

软件行业日新月异,新的更新迭代层出不穷,Go 生态圈里也有许许多多的变化。为此我们将每周基于 Golang Weekly 进行最新的资讯和内容精选同步。

欢迎大家能一起学习、进步以及分享!

Go 1.21.3 和 1.20.10 发布

近期 Go 发布了新的特性版本,主要方向是问题修复。修复内容是广受关注的 HTTP/2 漏洞,恶意客户端可以轻易攻陷 HTTP/2 服务器等问题。

具体如下:

这版本就这一个特性更新。有兴趣的同学可以查看:《net/http, x/net/http2: rapid stream resets can cause excessive work》

Go1.22 增强 http.ServeMux 路由功能

在今年 5 月份时,@Jonathan Amsterdam 发起了一项关于《net/http: add methods and path variables to ServeMux patterns》的讨论:

目标是希望通过添加两个功能来扩展标准的 HTTP 多路复用器(mux)的能力:根据 HTTP 方法(GET、POST 等)区分请求,并支持匹配路径中的通配符。

说白了就是是增强 net/http 标准库中的 HTTP 服务多路复用器(http.ServeMux)的模式匹配功能。

该特性预期会在 Go1.22 发布,在后续我们会再出一篇文章进行具体的讲解。有兴趣的同学可以先查看:《net/http: enhanced ServeMux routing

代码和工具

Lip Gloss(漂亮的终端布局)

Lip Gloss 提供了 "流畅" 风格的 API,用于为程序输出的文本添加样式,并且在最新的版本中添加了对绘制表格的支持。

如下图:

快速使用 Demo:

go 复制代码
import (
	"fmt"

	"github.com/charmbracelet/lipgloss"
)

var style = lipgloss.NewStyle().
	Bold(true).
	Foreground(lipgloss.Color("#FAFAFA")).
	Background(lipgloss.Color("#7D56F4")).
	PaddingTop(2).
	PaddingLeft(4).
	Width(22)

func main() {
	fmt.Println(style.Render("Hello, 煎鱼"))
}

输出结果如下:

有兴趣的同学可以查看 GitHub 仓库 charmbracelet/lipgloss 并使用。

Go OpenAI(ChatGPT SDK 相关)

现在 ChatGPT 相关的 AI 业务越来越常见,以往最早是 Python SDK 最先推出,使用面最广。目前 Go OpenAI 方面的 SDK 也逐渐慢慢完善了。

目前支持以下几类:

  • ChatGPT
  • GPT-3, GPT-4
  • DALL·E 2
  • Whisper

安装方式:

go 复制代码
go get github.com/sashabaranov/go-openai

快速使用 Demo:

go 复制代码
package main

import (
	"context"
	"fmt"
	openai "github.com/sashabaranov/go-openai"
)

func main() {
	client := openai.NewClient("your token")
	resp, err := client.CreateChatCompletion(
		context.Background(),
		openai.ChatCompletionRequest{
			Model: openai.GPT3Dot5Turbo,
			Messages: []openai.ChatCompletionMessage{
				{
					Role:    openai.ChatMessageRoleUser,
					Content: "Hello!",
				},
			},
		},
	)

	if err != nil {
		fmt.Printf("ChatCompletion error: %v\n", err)
		return
	}

	fmt.Println(resp.Choices[0].Message.Content)
}

具体更多的使用案例可以查看 sashabaranov/go-openai/examples 下的内容。

Gosh(在命令行中编写 Go 代码)

该包的作者认为其填补了一个 Go 命令行工具中的缺陷,因为许多语言都提供了一种编写代码并直接在命令行执行它的方法,而 Go 没有。

所以他来填坑了。

安装方式:

go 复制代码
go install github.com/nickwells/utilities/gosh@latest

检查安装情况:

go 复制代码
gosh -pre-check

快速使用 Demo:

rust 复制代码
gosh -e 'fmt.Print("Hello, World!")'

或是:

arduino 复制代码
gosh -p '"Hello, World!"'

这两个脚本都会输出 "Hello, World!"。

如果执行:

arduino 复制代码
gosh -pln '17*12.5'

将打印简单计算的结果。

另外也支持函数调用、HTTP Server、文件处理等相关功能。具体可以查看 nickwells/utilities/examples

简单来讲,就是写了个命令行工具能够支持直接运行 Go 相关代码,但覆盖度肯定是有限的。还要记语法。

其他代码资讯

  • slog-otel:log/slog 处理程序接口与 OpenTelemetry Span 跨度相关联,如果您同时使用 slog 和 OpenTelemetry,会比较有帮助。
  • Air 1.47:用于 Go 应用程序的实时重载。
  • pgroll 0.3 :用于 Postgres 的零停机、可逆的模式迁移。
  • GoCV 0.35:OpenCV 4 视觉库的绑定。
  • Fiber 2.50.0:受 Express.js 启发的 Go Web 框架。
  • Mockery 2.36:为接口生成模拟对象。
  • Slogor:一个个人观点强烈、色彩鲜艳的 slog 处理程序。
  • DynamiteMC :实验性的 Minecraft 服务器实现。

文章持续更新,可以微信搜【脑子进煎鱼了】阅读,本文 GitHub github.com/eddycjy/blo... 已收录,学习 Go 语言可以看 Go 学习地图和路线,欢迎 Star 催更。

推荐阅读

相关推荐
用户34232323763171 小时前
开源!Go+Wails+Vue3 手搓一个 PLC 实时监控桌面工具
go
止语Lab2 小时前
为什么你的 Go TCP server P99 延迟这么高
go
Andy Dennis8 小时前
nsq学习记录
消息队列·go·nsq
韦胖漫谈IT10 小时前
选语言不是站队,是选适合问题的工具
java·python·ai·rust·go·技术落地
喵个咪21 小时前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
夜悊1 天前
Go网络编程的学习代码示例:客户端/服务端(C/S)模型
go
审判长烧鸡1 天前
【AI问答】GO代码循环返值
go
捧 花1 天前
Eino框架记忆功能实现指南
go·agent·eino
Java陈序员1 天前
主流数据库通吃!一款开源实用的数据库备份管理工具!
react.js·postgresql·go
云浪1 天前
搞懂 Go WaitGroup:一篇文章彻底理解并发等待机制
后端·go