☰ Mục lục series
Tài liệu Go tiếng Việt
  1. Bắt đầu (Getting started)
    1. Tổng quan
    2. Tải về và cài đặt
    3. Bắt đầu với Go
    4. Quản lý các bản cài đặt Go
    5. Plugin trình soạn thảo và IDE
  2. Dạo quanh Go (A Tour of Go)
    1. Chào mừng
    2. Package, biến và hàm
    3. Điều khiển luồng
    4. Struct, slice và map
    5. Method và interface
    6. Generics
    7. Xử lý đồng thời
  3. Hướng dẫn (Tutorials)
    1. Danh sách hướng dẫn
    2. Tạo một Go module
    3. Gọi mã của bạn từ một module khác
    4. Trả về và xử lý lỗi
    5. Trả về lời chào ngẫu nhiên
    6. Trả về lời chào cho nhiều người
    7. Thêm một test
    8. Biên dịch và cài đặt ứng dụng
    9. Kết luận
    10. Bắt đầu với workspace nhiều module
    11. Phát triển RESTful API với Go và Gin
    12. Truy cập cơ sở dữ liệu quan hệ
    13. Bắt đầu với generics
    14. Bắt đầu với fuzzing
    15. Làm việc với JSON
    16. Tìm và sửa các dependency có lỗ hổng với govulncheck
    17. Tìm và khắc phục phụ thuộc có lỗ hổng với VS Code Go
    18. Viết ứng dụng web
  4. Viết code Go
    1. Cách viết mã Go
    2. Effective Go
    3. Doc Comment trong Go
  5. Module
    1. Phát triển và publish module
    2. Quản lý phụ thuộc
    3. Tổ chức một module Go
    4. Quản lý mã nguồn của module
    5. Cách đánh số phiên bản module
    6. Quy trình phát hành và đánh phiên bản module
    7. Publish một module
    8. Phát triển một bản cập nhật major version
    9. Tham chiếu tệp go.mod
    10. Ngừng hỗ trợ 'go get' cho việc cài đặt tệp thực thi
  6. Cơ sở dữ liệu (Database)
    1. Truy cập cơ sở dữ liệu quan hệ
    2. Mở một handle cơ sở dữ liệu
    3. Thực thi câu lệnh SQL không trả về dữ liệu
    4. Truy vấn dữ liệu
    5. Dùng prepared statement
    6. Thực thi transaction
    7. Huỷ các thao tác đang chạy
    8. Quản lý kết nối
    9. Tránh rủi ro SQL injection
  7. Chẩn đoán và hiệu năng
    1. Chẩn đoán
    2. Hướng dẫn về Go Garbage Collector
    3. Tối ưu hoá dựa trên profile
    4. Data Race Detector
    5. Gỡ lỗi mã Go bằng GDB
    6. Hỗ trợ coverage profiling cho integration test
  8. Bảo mật (Security)
    1. Tổng quan bảo mật
    2. Thực hành tốt về bảo mật cho lập trình viên Go
    3. Quản lý lỗ hổng trong Go
    4. Cơ sở dữ liệu lỗ hổng của Go
    5. Quét lỗ hổng trong IDE
    6. Chính sách CNA của Go
    7. Go Fuzzing
    8. Chi tiết kỹ thuật của Go Fuzzing
    9. Chính sách bảo mật của Go
    10. Threat Model của Go
    11. Các quyết định về bảo mật của Go
    12. Tuân thủ FIPS 140-3
  9. Công cụ và toolchain
    1. Tài liệu về các lệnh
    2. Về lệnh go
    3. Go Toolchains
    4. Telemetry của Go
    5. Cài đặt Go từ mã nguồn
    6. Cài đặt và sử dụng gccgo
  10. Tham khảo
    1. Câu hỏi thường gặp (FAQ)
    2. Go 1 và tương lai của các chương trình Go
    3. Hướng dẫn chuyển đổi sang encoding/json/v2
    4. Hướng dẫn đóng góp
    5. Đóng góp cho frontend gccgo
  11. Phụ lục
    1. Bảng thuật ngữ
Module

Phát triển và publish module

Bản dịch từ go.dev/doc/modules/developing

Bạn có thể gom các package liên quan vào module, rồi publish các module đó cho những lập trình viên khác dùng. Bài này trình bày tổng quan về việc phát triển và publish module.

Để hỗ trợ việc phát triển, publish và sử dụng module, bạn dùng:

  • Một quy trình làm việc để phát triển và publish module, chỉnh sửa chúng với các phiên bản mới theo thời gian. Xem Quy trình phát triển và publish module.
  • Các thực hành thiết kế giúp người dùng module hiểu được nó và nâng cấp lên phiên bản mới một cách ổn định. Xem Thiết kế và phát triển.
  • Một hệ thống phi tập trung để publish module và lấy mã nguồn của chúng. Bạn cung cấp module của mình cho các lập trình viên khác dùng từ chính repository của bạn và publish kèm một số phiên bản. Xem Publish phi tập trung.
  • Một cỗ máy tìm kiếm package và trình duyệt tài liệu (pkg.go.dev), nơi các lập trình viên có thể tìm thấy module của bạn. Xem Khám phá package.
  • Một quy ước đánh số phiên bản module để truyền đạt kỳ vọng về tính ổn định và tương thích ngược tới các lập trình viên dùng module của bạn. Xem Đánh phiên bản.
  • Các công cụ Go giúp các lập trình viên khác quản lý phụ thuộc dễ dàng hơn, bao gồm việc lấy mã nguồn module của bạn, nâng cấp, v.v. Xem Quản lý phụ thuộc.

Xem thêm

  • Nếu bạn chỉ quan tâm đến việc dùng các package do người khác phát triển thì đây không phải bài dành cho bạn. Thay vào đó, xem Quản lý phụ thuộc.
  • Để xem một hướng dẫn bao gồm vài điều cơ bản về phát triển module, xem Hướng dẫn: Tạo một module Go.

Quy trình phát triển và publish module

Khi bạn muốn publish module cho người khác, bạn áp dụng một vài quy ước để việc dùng những module đó dễ dàng hơn.

Các bước tổng quát sau đây được mô tả chi tiết hơn trong Quy trình phát hành và đánh phiên bản module.

  1. Thiết kế và viết mã cho các package mà module sẽ bao gồm.
  2. Commit mã nguồn vào repository của bạn theo những quy ước bảo đảm nó có thể được người khác lấy về qua các công cụ Go.
  3. Publish module để các lập trình viên có thể khám phá ra nó.
  4. Theo thời gian, chỉnh sửa module với các phiên bản dùng quy ước đánh số phiên bản để báo hiệu tính ổn định và tương thích ngược của từng phiên bản.

Thiết kế và phát triển

Module của bạn sẽ dễ được lập trình viên tìm thấy và sử dụng hơn nếu các hàm và package trong đó tạo thành một chỉnh thể mạch lạc. Khi thiết kế API công khai của một module, hãy cố giữ cho chức năng của nó tập trung và tách bạch.

Ngoài ra, việc thiết kế và phát triển module với tương thích ngược trong đầu sẽ giúp người dùng nâng cấp mà ít phải xáo trộn mã của chính họ. Bạn có thể dùng một số kỹ thuật trong mã nguồn để tránh phát hành một phiên bản phá vỡ tương thích ngược. Để biết thêm về những kỹ thuật đó, xem Giữ cho module của bạn tương thích trên blog của Go.

Trước khi publish một module, bạn có thể tham chiếu đến nó trên hệ thống tệp cục bộ bằng directive replace. Điều này giúp bạn dễ viết mã phía client gọi các hàm trong module trong khi module vẫn đang được phát triển. Để biết thêm thông tin, xem “Viết mã dựa trên một module chưa publish” trong Quy trình phát hành và đánh phiên bản module.

Publish phi tập trung

Trong Go, bạn publish module của mình bằng cách gắn tag cho mã nguồn của nó trong repository để các lập trình viên khác có thể dùng. Bạn không cần đẩy module lên một dịch vụ tập trung nào, bởi các công cụ Go có thể tải module của bạn trực tiếp từ repository (được định vị bằng module path của module, vốn là một URL đã lược bỏ scheme) hoặc từ một máy chủ proxy.

Sau khi import package của bạn trong mã của họ, các lập trình viên dùng công cụ Go (bao gồm lệnh go get) để tải mã nguồn module của bạn về nhằm biên dịch cùng. Để hỗ trợ mô hình này, bạn tuân theo các quy ước và thực hành tốt giúp các công cụ Go (thay mặt cho một lập trình viên khác) có thể lấy mã nguồn module của bạn từ repository. Ví dụ, các công cụ Go dùng module path mà bạn chỉ định, cùng với số phiên bản module bạn dùng để gắn tag cho module khi phát hành, nhằm định vị và tải module về cho người dùng của nó.

Để biết thêm về các quy ước và thực hành tốt liên quan đến mã nguồn và việc publish, xem Quản lý mã nguồn của module.

Để xem hướng dẫn từng bước về việc publish một module, xem Publish một module.

Khám phá package

Sau khi bạn đã publish module và có người lấy nó về bằng các công cụ Go, nó sẽ xuất hiện trên trang khám phá package của Go tại pkg.go.dev. Ở đó, các lập trình viên có thể tìm kiếm trên trang để thấy nó và đọc tài liệu của nó.

Để bắt đầu dùng module, một lập trình viên import các package từ module, rồi chạy lệnh go get để tải mã nguồn của nó về nhằm biên dịch cùng.

Để biết thêm về cách các lập trình viên tìm và dùng module, xem Quản lý phụ thuộc.

Đánh phiên bản

Khi bạn chỉnh sửa và cải thiện module theo thời gian, bạn gán các số phiên bản (dựa trên mô hình semantic versioning) được thiết kế để báo hiệu tính ổn định và tương thích ngược của từng phiên bản. Điều này giúp các lập trình viên dùng module của bạn xác định khi nào module đã ổn định và liệu một lần nâng cấp có thể kèm theo những thay đổi đáng kể về hành vi hay không. Bạn cho biết số phiên bản của module bằng cách gắn tag số đó cho mã nguồn của module trong repository.

Để biết thêm về việc phát triển các bản cập nhật major version, xem Phát triển một bản cập nhật major version.

Để biết thêm về cách bạn dùng mô hình semantic versioning cho module Go, xem Cách đánh số phiên bản module.

Nội dung gốc: Go Documentation © The Go Authors, giấy phép CC BY 3.0. Bản dịch và ghi chú: Lê Văn Dũng.