golang
golang 开发知识、技巧、常用包的介绍等。
📣 近期更新
- 2024-12-03
- 增加了 listmonk,自托管通讯和邮件列表管理器
- 2024-11-29
- 2024-11-25
- 增加了验证包 validator
- 2024-11-21
- 增加了 Mailpit,一个用于电子邮件测试的工具和 API mailpit
- 2024-11-18
- 增加了爬虫框架 katana
- 2024-11-08
- 增加了 kooky 包,用于从浏览器 cookie 存储中读取 cookie kooky
- 2024-10-24
- 2024-09-19
- 增加了进度条包 progressbar
- 2024-09-11
- 增加了性能监控工具 live-pprof
- 2024-09-04
- 2024-08-29
- 增加了 WebSocket 包 gws
- 2024-08-21
- 增加了语言检测包 lingua-go
- 2024-08-09
- 增加了文件类型检测包 mimetype
扩充专用类型
decimal
Go 中的任意精度定点十进制数
注意:decimal 库“只能”表示小数点后最多 2^31 位的数字。
- 零值为0,无需初始化即可安全使用
- 不损失精度的加法、减法、乘法
- 以指定精度除法
- 数据库/sql序列化/反序列化
- JSON 和 XML 序列化/反序列化
Fetching...
文件类型检测
mimetype
基于魔法数字的媒体类型和文件扩展名检测的快速 Golang 库
Install
go get github.com/gabriel-vasile/mimetype
Usage
mtype := mimetype.Detect([]byte)
// OR
mtype, err := mimetype.DetectReader(io.Reader)
// OR
mtype, err := mimetype.DetectFile("/path/to/file")
fmt.Println(mtype.String(), mtype.Extension())
Fetching...
文字语言检测
lingua-go
Go最准确的自然语言检测库,适用于短文本和混合语言文本。
与其他语言检测库相比,lingua-go 的重点是质量而不是数量,即在添加新语言之前首先对一小部分语言进行正确的检测。目前支持75种语言。
安装依赖:go get github.com/pemistahl/lingua-go
使用示例:
package main
import (
"fmt"
"github.com/pemistahl/lingua-go"
)
func main() {
languages := []lingua.Language{
lingua.English,
lingua.French,
lingua.German,
lingua.Spanish,
}
detector := lingua.NewLanguageDetectorBuilder().
FromLanguages(languages...).
Build()
if language, exists := detector.DetectLanguageOf("languages are awesome"); exists {
fmt.Println(language)
}
// Output: English
}
Fetching...
网络连接
gws
GWS(Go WebSocket)是一个用 Go 编写的非常简单、快速、可靠且功能丰富的 WebSocket 实现。它设计用于高并发环境,构建"接口", "代理", "游戏", "流媒体", "消息发布订阅"等服务。它提供非常简单的 API, 您可以轻松编写自己的服务器或客户端。
Fetching...
kooky
从浏览器 cookie 存储中读取 cookie。kooky 包含访问 Chrome、Firefox、Safari 等 cookie 存储并检索 cookie 的例程。
Fetching...
katana
爬虫框架,可以常规爬取,也可以无头浏览器爬取。
Fetching...
数据库
badger
BadgerDB 是一个可嵌入、持久且快速的键值 (KV) 数据库,采用纯 Go 编写。它是 Dgraph 的底层数据库,Dgraph 是一个快速的分布式图形数据库。它旨在成为 RocksDB 等非基于 Go 的键值存储的高性能替代方案。
Badger 非常稳定,可用于处理价值数百 TB 的数据集。Badger 支持并发 ACID 事务,并提供可序列化快照隔离 (SSI) 保证。
Fetching...
通知
gorush
用 Go(Golang)编写的推送通知服务器。
- 支持 APNs (iOS) 和 FCM (Android)。
- 支持 华为推送。
- 支持 HTTP/2 和 gRPC。
Fetching...
性能
live-pprof
live-pprof 是一个用于监控 Go 程序的实时性能分析工具,它可在几秒钟内启动,运行后实时收集指定端口的 pprof 数据,并将 pprof 数据实时在浏览器表示出来。
go install github.com/moderato-app/live-pprof@v1
步骤 1:设置 pprof 端点
package main
import (
"log"
"net/http"
_ "net/http/pprof"
)
func main() {
log.Println(http.ListenAndServe("localhost:6060", nil))
}
步骤 2:监控 pprof 端点
live-pprof 6060
# Or:
live-pprof http://localhost:6060/debug/pprof
# Both commands will monitor http://localhost:6060/debug/pprof
Fetching...
终端 TUI
progressbar
一个非常简单的线程安全进度条,应该可以在每个操作系统上正常工作。不支持多行输出。
progressbar 实现了 io.Writer 因此它可以自动检测写入流的字节数,因此您可以将其用作 io.Reader 的进度条。
req, _ := http.NewRequest("GET", "https://dl.google.com/go/go1.14.2.src.tar.gz", nil)
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
f, _ := os.OpenFile("go1.14.2.src.tar.gz", os.O_CREATE|os.O_WRONLY, 0644)
defer f.Close()
bar := progressbar.DefaultBytes(
resp.ContentLength,
"downloading",
)
io.Copy(io.MultiWriter(f, bar), resp.Body)
在终端中的表现
可以进行很多自定义操作 - 更改作者、颜色、宽度、描述、主题等。 查看所有选项。
Fetching...
go-pretty
用于美化表格、列表、进度条、文本等的控制台输出的实用程序,非常强调自定义。
╭─ Game Of Thrones
│ ├─ Winter
│ ├─ Is
│ ╰─ Coming
│ ├─ This
│ ├─ Is
│ ╰─ Known
╰─ The Dark Tower
╰─ The Gunslinger
Fetching...
AI
go-openai
Go 的 OpenAI ChatGPT、GPT-3、GPT-4、DALL·E、 Whisper API 包装器,非官方的。
支持:
- ChatGPT 4o, o1
- GPT-3, GPT-4
- DALL·E 2, DALL·E 3
- Whisper
Fetching...
测试
mailpit
Mailpit 是一款面向开发人员的小型、快速、低内存、零依赖、多平台电子邮件测试工具和 API。
它充当 SMTP 服务器,提供现代 Web 界面来查看和测试捕获的电子邮件,并包含用于自动集成测试的 API。
Mailpit Web UI 默认侦听 http://0.0.0.0:8025
,SMTP端口默认是 0.0.0.0:1025
。
Fetching...
go-vcr
Go-VCR 是一个用于记录和重放 HTTP 请求的库,用于测试。
package helloworld_test
import (
"testing"
"gopkg.in/dnaeon/go-vcr.v4/pkg/recorder"
)
func TestHelloWorld(t *testing.T) {
// Create our recorder
r, err := recorder.New("fixtures/hello-world")
if err != nil {
t.Fatal(err)
}
defer r.Stop() // Make sure recorder is stopped once done with it
client := r.GetDefaultClient()
url := "https://go.dev/"
resp, err := client.Get(url)
if err != nil {
t.Fatalf("Failed to get url %s: %s", url, err)
}
t.Logf("GET %s: %d\n", url, resp.StatusCode)
}
第一次运行此测试代码将导致创建 fixtures/hello-world.yaml盒,其中将包含我们的 HTTP 客户端和远程服务器之间记录的 HTTP 交互。 当我们下次执行此测试时,会发生的情况是go-vcr将从磁带中重播已记录的 HTTP 交互,而不是进行实际的外部调用。
Fetching...
验证
validator
基于标签实现结构和单个字段的值验证。
Fetching...
工具箱
lo
基于 Go 1.18+ 泛型的 Lodash 风格 Go 库(映射、过滤器、包含、查找...)
Fetching...
服务器
listmonk
自托管通讯和邮件列表管理器
Fetching...