大家好,我是煎鱼。
软件行业日新月异,新的更新迭代层出不穷,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:
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 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/blog 已收录,学习 Go 语言可以看 Go 学习地图和路线,欢迎 Star 催更。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。