☰ 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

Ngừng hỗ trợ 'go get' cho việc cài đặt tệp thực thi

Bản dịch từ go.dev/doc/go-get-install-deprecation

Tổng quan

Kể từ Go 1.17, việc cài đặt tệp thực thi bằng go get bị xem là không còn được khuyến khích. Bạn có thể dùng go install thay thế.

Trong Go 1.18, go get sẽ không còn build package nữa; nó sẽ chỉ được dùng để thêm, cập nhật hoặc gỡ bỏ phụ thuộc trong go.mod. Cụ thể, go get sẽ luôn hoạt động như thể cờ -d đang được bật.

Dùng gì thay thế

Để cài đặt một tệp thực thi trong ngữ cảnh của module hiện tại, dùng go install không kèm hậu tố phiên bản, như dưới đây. Cách này áp dụng các yêu cầu phiên bản và các chỉ thị khác từ tệp go.mod trong thư mục hiện tại hoặc thư mục cha.

go install example.com/cmd

Để cài đặt một tệp thực thi mà bỏ qua module hiện tại, dùng go install kèm hậu tố phiên bản như @v1.2.3 hoặc @latest, như dưới đây. Khi dùng kèm hậu tố phiên bản, go install không đọc cũng không cập nhật tệp go.mod trong thư mục hiện tại hay thư mục cha.

# Install a specific version.
go install example.com/[email protected]

# Install the highest available version.
go install example.com/cmd@latest

Để tránh nhập nhằng, khi go install được dùng kèm hậu tố phiên bản, mọi đối số đều phải trỏ tới các package main trong cùng một module ở cùng một phiên bản. Nếu module đó có tệp go.mod, tệp này không được chứa những chỉ thị như replace hay exclude, vì chúng sẽ khiến module được diễn giải khác đi nếu nó là module chính. Thư mục vendor của module sẽ không được sử dụng.

Xem go install để biết chi tiết.

Vì sao có thay đổi này

Kể từ khi module được giới thiệu, lệnh go get vừa được dùng để cập nhật phụ thuộc trong go.mod, vừa được dùng để cài đặt lệnh. Việc gộp chung này thường gây khó hiểu và bất tiện: trong hầu hết trường hợp, lập trình viên muốn cập nhật một phụ thuộc hoặc cài đặt một lệnh, chứ không phải làm cả hai cùng lúc.

Kể từ Go 1.16, go install có thể cài đặt một lệnh ở phiên bản được chỉ định trên dòng lệnh mà bỏ qua tệp go.mod trong thư mục hiện tại (nếu có). Giờ đây trong hầu hết trường hợp, go install nên là lệnh dùng để cài đặt các lệnh.

Khả năng build và cài đặt lệnh của go get nay bị xem là không còn được khuyến khích, vì chức năng đó đã trùng lặp với go install. Việc loại bỏ chức năng này sẽ giúp go get chạy nhanh hơn, bởi mặc định nó sẽ không biên dịch hay liên kết package nữa. go get cũng sẽ không báo lỗi khi cập nhật một package không build được trên nền tảng hiện tại.

Xem đề xuất #40276 để đọc toàn bộ phần thảo luận.

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.