likes
comments
collection
share

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

作者站长头像
站长
· 阅读数 17

大家好,我是煎鱼。

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

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

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

Go 1.21.3 和 1.20.10 发布

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

具体如下:

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

这版本就这一个特性更新。有兴趣的同学可以查看:《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》的讨论:

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

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

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

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

代码和工具

Lip Gloss(漂亮的终端布局)

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

如下图:

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

快速使用 Demo:

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, 煎鱼"))
}

输出结果如下:

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

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

Go OpenAI(ChatGPT SDK 相关)

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

目前支持以下几类:

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

安装方式:

go get github.com/sashabaranov/go-openai

快速使用 Demo:

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 install github.com/nickwells/utilities/gosh@latest

检查安装情况:

gosh -pre-check

快速使用 Demo:

gosh -e 'fmt.Print("Hello, World!")'

或是:

gosh -p '"Hello, World!"'

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

如果执行:

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 催更。

推荐阅读