☰ 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 một bản cập nhật major version

Bản dịch từ go.dev/doc/modules/major-version

Bạn phải cập nhật lên một major version mới khi những thay đổi bạn định đưa vào phiên bản mới không thể bảo đảm tương thích ngược cho người dùng module. Ví dụ, bạn sẽ phải thay đổi như vậy nếu bạn sửa API công khai của module theo cách làm hỏng mã phía client đang dùng các phiên bản trước của module.

Lưu ý: Mỗi loại bản phát hành – major, minor, patch hay pre-release – đều mang một ý nghĩa khác nhau đối với người dùng module. Người dùng dựa vào những khác biệt này để hiểu mức độ rủi ro mà một bản phát hành mang lại cho mã của chính họ. Nói cách khác, khi chuẩn bị một bản phát hành, hãy bảo đảm số phiên bản của nó phản ánh chính xác bản chất của những thay đổi kể từ bản phát hành trước. Để biết thêm về số phiên bản, xem Cách đánh số phiên bản module.

Xem thêm

Những điều cần cân nhắc khi cập nhật major version

Bạn chỉ nên cập nhật lên một major version mới khi thực sự cần thiết. Một bản cập nhật major version đồng nghĩa với xáo trộn đáng kể cho cả bạn lẫn người dùng module. Khi cân nhắc một bản cập nhật major version, hãy nghĩ về những điều sau:

  • Hãy nói rõ với người dùng của bạn rằng việc phát hành major version mới có ý nghĩa gì đối với sự hỗ trợ của bạn dành cho các major version trước.

    Các phiên bản trước có bị ngừng hỗ trợ không? Vẫn được hỗ trợ như trước? Bạn có tiếp tục bảo trì các phiên bản trước, bao gồm cả việc sửa lỗi, hay không?

  • Hãy sẵn sàng gánh việc bảo trì hai phiên bản: bản cũ và bản mới. Ví dụ, nếu bạn sửa lỗi ở một bản, bạn sẽ thường phải chuyển bản sửa đó sang bản còn lại.

  • Hãy nhớ rằng một major version mới là một module mới xét từ góc độ quản lý phụ thuộc. Người dùng của bạn sẽ phải cập nhật để dùng một module mới sau khi bạn phát hành, chứ không chỉ đơn giản là nâng cấp.

    Đó là vì một major version mới có module path khác với major version liền trước. Ví dụ, với một module có module path là example.com/mymodule, phiên bản v2 sẽ có module path là example.com/mymodule/v2.

  • Khi bạn phát triển một major version mới, bạn cũng phải cập nhật các import path ở mọi nơi mã nguồn import package từ module mới. Người dùng module của bạn cũng phải cập nhật import path của họ nếu muốn nâng cấp lên major version mới.

Tách nhánh cho một bản phát hành major

Cách xử lý mã nguồn đơn giản nhất khi chuẩn bị phát triển một major version mới là tách nhánh repository tại phiên bản mới nhất của major version trước đó.

Ví dụ, trong một cửa sổ dòng lệnh, bạn có thể chuyển vào thư mục gốc của module, rồi tạo một branch v2 mới ở đó.

$ cd mymodule
$ git checkout -b v2
Switched to a new branch "v2"

Sơ đồ minh hoạ một repository được tách nhánh từ master sang v2

Sau khi đã tách nhánh mã nguồn, bạn cần thực hiện những thay đổi sau đây với mã nguồn cho phiên bản mới:

  • Trong tệp go.mod của phiên bản mới, thêm số major version mới vào cuối module path, như trong ví dụ sau:

    • Phiên bản hiện có: example.com/mymodule
    • Phiên bản mới: example.com/mymodule/v2
  • Trong mã Go của bạn, cập nhật mọi đường dẫn package được import ở nơi bạn import một package từ module, thêm số major version vào cuối phần module path.

    • Câu lệnh import cũ: import "example.com/mymodule/package1"
    • Câu lệnh import mới: import "example.com/mymodule/v2/package1"

Để biết các bước publish, xem Publish một 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.