☰ 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ữ
Tham khảo

Đóng góp cho frontend gccgo

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

Giới thiệu

Đây là một số ghi chú về việc đóng góp cho frontend gccgo của GCC. Để biết thông tin về việc đóng góp cho các phần khác của Go ngoài gccgo, xem Đóng góp cho dự án Go. Để biết thông tin về cách tự build gccgo, xem Cài đặt và sử dụng gccgo. Để biết thêm các chi tiết cụ thể về quy trình phát triển với frontend gccgo, xem tệp HACKING trong repository gofrontend.

Điều kiện pháp lý tiên quyết

Bạn phải tuân theo các quy tắc bản quyền của Go đối với mọi thay đổi trong frontend gccgo và thư viện libgo đi kèm. Mã thuộc về GCC chứ không phải gccgo thì phải tuân theo các quy tắc đóng góp chung của GCC.

Mã nguồn

Mã nguồn gốc của frontend gccgo có thể tìm thấy tại https://go.googlesource.com/gofrontend. Chúng được mirror tại https://github.com/golang/gofrontend. Mã nguồn gốc tự nó không build được, mà chỉ build được khi đi cùng GCC (trong tương lai, các compiler khác có thể được hỗ trợ). Các thay đổi đối với frontend gccgo cũng được áp dụng vào repository mã nguồn GCC đặt tại gcc.gnu.org. Trong repository gofrontend, thư mục go được mirror sang thư mục gcc/go/gofrontend trong repository GCC, còn thư mục libgo của gofrontend được mirror sang thư mục libgo của GCC. Ngoài ra, thư mục test từ repository Go chính được mirror sang thư mục gcc/testsuite/go.test/test trong repository GCC.

Các thay đổi trong những thư mục này luôn chảy từ mã nguồn gốc sang repository GCC. Các tệp không bao giờ nên được sửa trong repository GCC, ngoại trừ bằng cách sửa chúng trong mã nguồn gốc rồi mirror sang.

Frontend gccgo được viết bằng C++. Nó tuân theo các chuẩn viết mã C++ của GNU và GCC. Khi viết mã cho frontend, hãy theo cách định dạng của mã xung quanh. Hầu hết mã đặc thù cho GCC không nằm trong bản thân frontend mà nằm trong mã nguồn GCC ở thư mục gcc/go.

Thư viện run-time của gccgo về cơ bản giống với thư viện trong repository Go chính. Mã thư viện trong repository Go được merge định kỳ vào thư mục libgo/go của gofrontend rồi vào repository GCC, bằng shell script libgo/merge.sh. Do đó, phần lớn thay đổi về thư viện nên được thực hiện trong repository Go chính. Các tệp nằm ngoài libgo/go là đặc thù cho gccgo; dù vậy, một số tệp trong libgo/runtime dựa trên các tệp trong src/runtime ở repository Go chính.

Kiểm thử

Mọi patch đều phải được kiểm thử. Một patch gây ra lỗi mới là không chấp nhận được.

Để chạy bộ test của gccgo, hãy chạy make check-go trong thư mục build của bạn. Lệnh này sẽ chạy nhiều test khác nhau trong gcc/testsuite/go.* và cũng sẽ chạy bộ test libgo. Bản sao các test từ repository Go chính này được chạy bằng script DejaGNU nằm trong gcc/testsuite/go.test/go-test.exp.

Phần lớn test mới nên được gửi vào repository Go chính để sau đó được mirror sang repository GCC. Nếu cần các test riêng cho gccgo, chúng nên được đặt trong thư mục gcc/testsuite/go.go-torture hoặc gcc/testsuite/go.dg trong repository GCC.

Gửi thay đổi

Các thay đổi đối với frontend Go nên theo cùng quy trình như với repository Go chính, chỉ khác là dành cho dự án gofrontend và mailing list [email protected] thay vì dự án go và mailing list [email protected]. Những thay đổi đó sau đó sẽ được merge vào mã nguồn GCC.

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.