- vừa được xem lúc

15 Gói thư viện Go đáng để bạn dành thời gian

0 0 1

Người đăng: Thái Thịnh

Theo Viblo Asia

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.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Embedded Template in Go

Getting Start. Part of developing a web application usually revolves around working with HTML as user interface.

0 0 66

- vừa được xem lúc

Tại sao bạn nên học Go ?

. Trong những năm gần đây, có một sự trỗi dậy của một ngôn ngữ lập trình mới Go hay Golang. Không có gì làm cho các developer chúng ta phát cuồng hơn một ngôn ngữ mới, phải không ?.

0 0 44

- vừa được xem lúc

Implement Multi-Connections Download in Go - Part II

Getting Start. In Part I we've looked at how to implement core download functionality as well as define a public API for client to use our package.

0 0 29

- vừa được xem lúc

Sự khó chịu khi mới học Golang và cách giải quyết siêu đơn giản

Gần đây mình đang tìm một giải pháp backend thay thế cho Java Spring (do nó nặng vãi chưởng), sẵn tiện học luôn ngôn ngữ mới. Bỏ ra một ngày để tìm hiểu, khảo sát vài ngôn ngữ backend, cuối cùng mình

0 0 64

- vừa được xem lúc

Serverless Series (Golang) - Bài 9 - Codepipeline Notification with AWS Chatbot and AWS SNS

Giới thiệu. Chào các bạn tới với series về Serverless, ở bài trước chúng ta đã tìm hiểu về cách dựng CI/CD với Codepipeline.

0 0 32

- vừa được xem lúc

Golang và Goroutines

Giới thiệu. Dạo gần đây mình có tìm hiểu về Go hay còn được gọi là Golang thì mình thấy Go có đặc điểm nổi bật là có tốc độ xử lý nhanh và hỗ trợ xử lý đa luồng (concurrency) rất tốt với Goroutines.

0 0 58