Tôi đã làm việc với Go nhiều năm, xây dựng ứng dụng web, CLI, microservices, daemon và vô số thứ linh tinh mà ít ai nói đến. Nếu bạn cũng đã gắn bó với Go đủ lâu, bạn sẽ biết thư viện chuẩn của nó rất ổn, nhưng không phải lúc nào cũng đủ.
Hầu hết các vấn đề bạn gặp phải đều đã được giải quyết—một cách gọn gàng, hiệu quả và không lằng nhằng—bởi những thư viện được duy trì bởi những người rất am hiểu.
Vậy nên, thay vì liệt kê một loạt gói Go “ngầu lòi”, dưới đây là 15 thư viện tôi đã chọn lọc kỹ lưỡng dựa trên kinh nghiệm thực tế. Đây là những thứ tôi đã dùng đi dùng lại, và chưa bao giờ khiến tôi thất vọng.
Core Utilities (Tiện ích lõi)
Nếu bạn xây dựng bất cứ thứ gì có dính đến config, flags hoặc map—hay chỉ đơn giản muốn code sạch hơn, dễ test hơn, đây là những gói sẽ giúp bạn hoàn thành công việc.
1. spf13/cobra
Cobra được thiết kế để xây dựng ứng dụng CLI hiện đại. Nó hỗ trợ subcommand, flag lồng nhau, alias cho lệnh và tự động sinh help text. Đặc biệt hữu ích với công cụ CLI nhiều lệnh và cấu trúc phức tạp.
Cobra tích hợp tốt với spf13/viper
để quản lý cấu hình và biến môi trường, rất lý tưởng cho các CLI đầy đủ tính năng.
2. urfave/cli
Đây là lựa chọn nhẹ hơn Cobra. Nó tập trung vào phát triển nhanh ứng dụng CLI mà không cần quá nhiều setup. Nó vẫn hỗ trợ flags, lệnh lồng nhau, thông báo help tuỳ chỉnh, nhưng diện tích API nhỏ hơn nhiều.
urfave/cli
phù hợp cho công cụ nội bộ hoặc tiện ích nhỏ, nơi bạn muốn nhanh gọn, không rườm rà.
3. stretchr/testify
testify
là bộ công cụ test giúp bạn có assertions mạnh mẽ hơn, mock dễ hơn và hỗ trợ test suite, bổ sung cho gói testing chuẩn của Go.
Nó không thay thế testing.T
, mà hoạt động song song, cung cấp tiện ích như assert.Equal
, require.NoError
, và mock.Call
.
4. mitchellh/mapstructure
Gói này giúp giải mã map[string]interface{}
(thường có được từ json.Unmarshal
hoặc file config) thành struct Go được định kiểu. Nó hỗ trợ tag tuỳ chỉnh, input “yếu kiểu” và struct lồng nhau.
Rất hữu ích khi làm việc với input động, ví dụ config do người dùng cung cấp hoặc dữ liệu API. Bạn sẽ gặp nó trong các công cụ như Terraform hay Consul.
Khác với encoding/json
, gói này chỉ tập trung giải mã map, không phải parse/marshal JSON.
5. olekukonko/tablewriter
tablewriter
giúp render bảng dữ liệu đẹp trong terminal. Nó nhận slice/array và in ra bảng căn lề, hỗ trợ border, màu và căn chỉnh.
Phù hợp với CLI cần hiển thị danh sách, metric, hay dữ liệu dạng bảng. Nó không xử lý giao diện tương tác như tview
, nhưng hiển thị tĩnh rất tốt.
Web & APIs
Nếu bạn xây dựng API, dịch vụ HTTP hoặc endpoint JSON, những thư viện này giúp code sạch, hiệu năng cao mà không bắt bạn phải chấp nhận framework cứng nhắc.
6. gin-gonic/gin
Gin là framework HTTP hiệu suất cao, bọc net/http
chuẩn và thêm routing, middleware, validation JSON, xử lý lỗi.
Nổi tiếng về tốc độ và sự đơn giản. Nếu bạn làm RESTful API và muốn thứ gì nhanh hơn, tiện hơn net/http
thuần, Gin là lựa chọn mạnh.
7. labstack/echo
Echo là framework web đầy đủ tính năng. Cũng như Gin, nó có routing và middleware, nhưng còn tích hợp sẵn CORS, GZIP, JWT middleware, validation request, v.v.
Echo phù hợp khi bạn muốn nhiều tính năng “đi kèm sẵn” để xây dựng API production.
Gin và Echo khá giống nhau, nhưng Echo có nhiều tiện ích out-of-the-box hơn.
8. go-chi/chi
Chi là router nhẹ, tập trung vào tính mô-đun và phong cách Go idiomatic. Nó xây trên net/http
, tối giản và linh hoạt.
Chi lý tưởng nếu bạn muốn kiểm soát tối đa mà không phải nhận framework cồng kềnh. Nó kết hợp tốt với middleware chuẩn và hay được dùng trong microservice.
Khác Gin/Echo, Chi không thêm abstraction mới lên handler/context.
9. tidwall/gjson
GJSON cho phép bạn trích xuất giá trị từ chuỗi JSON bằng cú pháp đơn giản, như user.name
, items.#.id
... mà không cần unmarshal vào struct.
Rất nhanh và cực tiện khi bạn cần inspect/filter JSON raw (log, response, config). Đây là công cụ chỉ đọc. Nếu cần sửa JSON, hãy xem sjson
cùng tác giả.
Dev & Ops Helpers
Những gói này không thêm tính năng mới, mà giúp codebase gọn, log dễ đọc, CI sạch sẽ. Chúng là công cụ duy trì dự án lâu dài.
10. golangci/golangci-lint
Công cụ lint tổng hợp nhiều linter nổi tiếng (govet
, staticcheck
, errcheck
...) thành 1 binary nhanh gọn. Cấu hình dễ, chạy nhanh, cực phổ biến trong CI.
Thay vì chạy riêng từng linter, golangci-lint
cung cấp giao diện thống nhất để phát hiện lỗi sớm.
11. sirupsen/logrus
Logrus là logger có cấu trúc, xuất log dưới dạng JSON, text hoặc tuỳ chỉnh. Dùng dễ, tích hợp mượt.
Nó không phải logger nhanh nhất, nhưng ổn định, tài liệu đầy đủ, phù hợp với đa số app không cần log siêu khủng.
12. uber-go/zap
Zap là logger cấu trúc, tối ưu hiệu suất. Nó tránh reflection, cấp phát bộ nhớ ít hơn các logger khác.
Nếu bạn làm hệ thống throughput cao, worker nền, hoặc cần performance tối ưu, Zap đáng dùng hơn Logrus. API của nó dài dòng hơn, nhưng đổi lại hiệu suất vượt trội.
Storage, Persistence & Data
Nếu bạn lưu trạng thái, cache dữ liệu, hoặc làm việc với file local, những gói này giúp đơn giản hóa công việc mà không cần phụ thuộc phức tạp.
13. jmoiron/sqlx
sqlx
mở rộng database/sql
chuẩn, thêm query đặt tên, ánh xạ struct, scan slice.
Nó không phải ORM, chỉ giúp loại bỏ boilerplate khi làm việc trực tiếp với SQL.
14. etcd-io/bbolt
Bolt (nay thuộc etcd-io) là kho key-value nhúng cấp thấp. ACID-compliant, nhanh, không cần server.
Lý tưởng để lưu preference người dùng, cache dữ liệu, hoặc record nhỏ cục bộ. Nếu bạn cần lớp persistence nhẹ, không phải DB đầy đủ, Bolt rất phù hợp.
15. go-yaml/yaml
Thư viện parse YAML đáng tin cậy nhất cho Go. Nó hỗ trợ full spec YAML (bao gồm anchor, alias), xử lý file thực tế trong hạ tầng.
Bạn sẽ gặp YAML nhiều khi làm Kubernetes, Docker Compose, Terraform. Gói này giúp load/parse đúng đắn, không bất ngờ.
Kết luận
15 gói thư viện này tôi đã dùng đi dùng lại trong nhiều dự án thực tế và luôn quay lại vì chúng ổn định, tài liệu rõ ràng, giải quyết vấn đề gọn gàng.
Nếu bạn có gói nào yêu thích mà tôi chưa nhắc đến—nhất là công cụ đặc thù—hãy chia sẻ. Tôi luôn muốn tìm thêm những công cụ hay ho.