Skip to content

附录B:第三方库推荐清单

附录B推荐Go常用的第三方库:Web框架(Gin、Echo)、ORM( GORM)、数据库(go-redis)、CLI(cobra)、日志(zap)等。注意:选择库时优先GitHub星数和最近更新时间。

使用方法:按需查阅


轻量级Web框架,性能优秀。

import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{"message": "pong"})
})
r.Run(":8080")
}

高性能、简洁的Web框架。

import "github.com/labstack/echo/v4"
func main() {
e := echo.New()
e.GET("/hello", func(c echo.Context) error {
return c.String(200, "Hello")
})
e.Start(":8080")
}

受Express启发的Web框架,性能接近fasthttp。

import "github.com/gofiber/fiber/v2"
func main() {
app := fiber.New()
app.Get("/hello", func(c *fiber.Ctx) error {
return c.SendString("Hello")
})
app.Listen(":8080")
}

import "gorm.io/gorm"
import "gorm.io/driver/sqlite"
db, _ := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
// 自动迁移
db.AutoMigrate(&User{})
// CRUD
var user User
db.First(&user, 1)
db.Create(&user)
db.Model(&user).Update("Name", "new name")
db.Delete(&user)
import (
"github.com/jmoiron/sqlx"
_ "github.com/go-sql-driver/mysql"
)
db, _ := sqlx.Connect("mysql", "root:@tcp(localhost:3306)/test")
var users []User
db.Select(&users, "SELECT * FROM users WHERE age > ?", 18)
import "github.com/redis/go-redis/v9"
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
})
ctx := context.Background()
rdb.Set(ctx, "key", "value", 0)
val, _ := rdb.Get(ctx, "key").Result()

import "github.com/spf13/viper"
viper.SetConfigName("config")
viper.SetConfigType("yaml")
viper.AddConfigPath(".")
viper.ReadInConfig()
// 使用
viper.GetString("database.host")
viper.GetInt("database.port")
viper.GetBool("debug")
import "github.com/joho/godotenv"
godotenv.Load() // 加载.env文件
os.Getenv("DB_HOST")

import "go.uber.org/zap"
logger, _ := zap.NewProduction()
defer logger.Sync()
logger.Info("info message",
zap.String("key", "value"),
zap.Int("count", 10),
)
// 字段记录
logger.Error("error occurred",
zap.Error(err),
zap.String("operation", "db_query"),
)
import "github.com/sirupsen/logrus"
log := logrus.New()
log.SetFormatter(&logrus.JSONFormatter{})
log.WithFields(logrus.Fields{
"user": "alice",
"action": "login",
}).Info("user logged in")

import "github.com/spf13/cobra"
var rootCmd = &cobra.Command{
Use: "app",
Short: "My CLI app",
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("Hello")
},
}
var serveCmd = &cobra.Command{
Use: "serve",
Short: "Start server",
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("Server started")
},
}
rootCmd.AddCommand(serveCmd)
rootCmd.Execute()
import "github.com/urfave/cli/v3"
func main() {
app := &cli.Command{
Name: "app",
Usage: "My app",
Action: func(ctx context.Context) error {
fmt.Println("Hello!")
return nil
},
}
app.Run(context.Background())
}

import "github.com/go-playground/validator/v10"
type User struct {
Name string `validate:"required,min=2,max=50"`
Email string `validate:"required,email"`
Age int `validate:"gte=0,lte=150"`
}
validate := validator.New()
err := validate.Struct(user)

import "github.com/pkg/errors"
err := errors.Wrap(originalErr, "操作失败")
errors.Is(err, originalErr)
errors.Cause(err)
import "golang.org/x/sync/once"
var onceFunc func()
once := &once.Once{}
once.Do(func() {
fmt.Println("只执行一次")
})
import "golang.org/x/sync/semaphore"
sem := semaphore.NewWeighted(3)
sem.Acquire(context.Background(), 1)
defer sem.Release(1)
// 执行业务逻辑

import "github.com/stretchr/testify/assert"
import "github.com/stretchr/testify/suite"
assert.Equal(t, expected, actual)
assert.Nil(t, err)
assert.Contains(t, str, "sub")
assert.Len(t, slice, 3)
suite.Suite
import "github.com/onsi/ginkgo/v2"
var _ = Describe("Calculator", func() {
It("should add numbers", func() {
Expect(add(1, 2)).To(Equal(3))
})
})

类别库说明
Web框架gin, echo, fiberHTTP服务
ORMgorm, ent数据库ORM
数据库驱动go-sql-driver/mysql, pgx数据库连接
Redisgo-redisRedis客户端
配置viper, godotenv配置管理
日志zap, logrus结构化日志
命令行cobra, urfave/cliCLI应用
验证validator数据验证
错误pkg/errors错误包装
工具once, semaphore同步原语
测试testify, ginkgo测试框架
APIchi, gorilla/mux路由库
JSONgo-json, jsoniter高性能JSON