☰ 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ữ
Bắt đầu (Getting started)

Tổng quan tài liệu Go

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

Ngôn ngữ lập trình Go là một dự án mã nguồn mở nhằm giúp lập trình viên làm việc hiệu quả hơn.

Go giàu sức biểu đạt, súc tích, trong sáng và hiệu quả. Các cơ chế xử lý đồng thời của Go giúp bạn dễ dàng viết những chương trình tận dụng tối đa máy nhiều nhân và máy nối mạng, trong khi hệ thống kiểu dữ liệu mới mẻ của nó cho phép xây dựng chương trình một cách linh hoạt và theo từng module. Go biên dịch nhanh sang mã máy nhưng vẫn có sự tiện lợi của garbage collection và sức mạnh của reflection lúc chạy. Đây là một ngôn ngữ biên dịch, kiểu tĩnh, nhanh, nhưng lại cho cảm giác như một ngôn ngữ thông dịch, kiểu động.

Bắt đầu

Cài đặt Go

Hướng dẫn tải về và cài đặt Go.

Hướng dẫn: Bắt đầu

Một hướng dẫn Hello, World ngắn gọn để bắt đầu. Tìm hiểu đôi chút về mã Go, các công cụ, package và module.

Hướng dẫn: Tạo một module

Một hướng dẫn gồm các chủ đề ngắn giới thiệu về hàm, xử lý lỗi, mảng, map, kiểm thử đơn vị và biên dịch.

Hướng dẫn: Bắt đầu với workspace nhiều module

Giới thiệu những điều cơ bản về việc tạo và dùng workspace nhiều module trong Go. Workspace nhiều module rất hữu ích khi bạn cần chỉnh sửa xuyên suốt nhiều module.

Hướng dẫn: Phát triển API RESTful với Go và Gin

Giới thiệu những điều cơ bản về việc viết một API dịch vụ web RESTful với Go và Gin Web Framework.

Hướng dẫn: Bắt đầu với generics

Với generics, bạn có thể khai báo và dùng những hàm hay kiểu dữ liệu được viết để làm việc với bất kỳ kiểu nào trong một tập kiểu do mã gọi cung cấp.

Hướng dẫn: Bắt đầu với fuzzing

Fuzzing có thể sinh ra dữ liệu đầu vào cho các test của bạn, giúp bắt được những trường hợp biên và vấn đề bảo mật mà bạn có thể đã bỏ sót.

Viết ứng dụng web

Xây dựng một ứng dụng web đơn giản.

Cách viết mã Go

Tài liệu này giải thích cách phát triển một bộ package Go đơn giản bên trong một module, đồng thời cho thấy cách dùng lệnh go để build và test các package.

Dạo quanh Go

Một phần giới thiệu tương tác về Go gồm bốn phần. Phần đầu nói về cú pháp cơ bản và cấu trúc dữ liệu; phần hai bàn về method và interface; phần ba về Generics; phần bốn giới thiệu các cơ chế đồng thời nguyên thuỷ của Go. Mỗi phần kết thúc bằng vài bài tập để bạn luyện lại những gì vừa học. Bạn có thể học trực tuyến hoặc cài đặt bản chạy trên máy bằng:

$ go install golang.org/x/website/tour@latest

Lệnh này sẽ đặt binary tour vào thư mục bin thuộc GOPATH của bạn.

Dùng và hiểu Go

Effective Go

Một tài liệu đưa ra các lời khuyên để viết mã Go rõ ràng, đúng phong cách. Bài đọc bắt buộc cho mọi lập trình viên Go mới. Nó bổ sung cho bài dạo quanh Go và đặc tả ngôn ngữ, cả hai nên được đọc trước.

Câu hỏi thường gặp (FAQ)

Giải đáp những thắc mắc phổ biến về Go.

Plugin trình soạn thảo và IDE

Một tài liệu tóm lược các plugin trình soạn thảo và IDE thông dụng có hỗ trợ Go.

Chẩn đoán

Tóm lược các công cụ và phương pháp để chẩn đoán vấn đề trong chương trình Go.

Hướng dẫn về Go Garbage Collector

Một tài liệu mô tả cách Go quản lý bộ nhớ, và cách tận dụng tối đa điều đó.

Quản lý phụ thuộc

Khi mã của bạn dùng các package bên ngoài, những package đó (được phân phối dưới dạng module) trở thành phụ thuộc.

Fuzzing

Trang tài liệu chính về fuzzing trong Go.

Coverage cho ứng dụng Go

Trang tài liệu chính về kiểm thử độ phủ (coverage) cho ứng dụng Go.

Tối ưu hoá dựa trên profile

Trang tài liệu chính về tối ưu hoá dựa trên profile (PGO) cho ứng dụng Go.

Hướng dẫn chuyển đổi sang encoding/json/v2

Hướng dẫn chuyển đổi an toàn theo từng bước từ encoding/json sang encoding/json/v2.

Tham khảo

Tài liệu package

Tài liệu về thư viện chuẩn của Go.

Tài liệu về các lệnh

Tài liệu về các công cụ của Go.

Đặc tả ngôn ngữ

Đặc tả chính thức của ngôn ngữ Go.

Tài liệu tham khảo về Go Modules

Sổ tay tham khảo chi tiết về hệ thống quản lý phụ thuộc của Go.

Tham khảo tệp go.mod

Tham khảo về các directive có trong tệp go.mod.

Mô hình bộ nhớ của Go

Một tài liệu quy định các điều kiện để việc đọc một biến trong một goroutine được bảo đảm thấy được giá trị do các lần ghi vào cùng biến đó ở một goroutine khác tạo ra.

Hướng dẫn đóng góp

Đóng góp cho Go.

Lịch sử bản phát hành

Tóm tắt các thay đổi giữa những bản phát hành Go.

Truy cập cơ sở dữ liệu

Hướng dẫn: Truy cập cơ sở dữ liệu quan hệ

Giới thiệu những điều cơ bản về việc truy cập cơ sở dữ liệu quan hệ bằng Go và package database/sql trong thư viện chuẩn.

Truy cập cơ sở dữ liệu quan hệ

Tổng quan về các tính năng truy cập dữ liệu của Go.

Mở một database handle

Bạn dùng database handle của Go để thực hiện các thao tác với cơ sở dữ liệu. Khi bạn đã mở một handle với các thuộc tính kết nối cơ sở dữ liệu, handle đó đại diện cho một connection pool mà nó quản lý thay cho bạn.

Thực thi câu lệnh SQL không trả về dữ liệu

Với những thao tác SQL có thể thay đổi cơ sở dữ liệu, gồm INSERT, UPDATE và DELETE, bạn dùng các method Exec.

Truy vấn dữ liệu

Với các câu lệnh SELECT trả về dữ liệu từ một truy vấn, hãy dùng method Query hoặc QueryRow.

Dùng prepared statement

Định nghĩa một prepared statement để dùng lại nhiều lần có thể giúp mã của bạn chạy nhanh hơn đôi chút, nhờ tránh được chi phí tạo lại câu lệnh mỗi lần mã thực hiện thao tác với cơ sở dữ liệu.

Thực thi transaction

sql.Tx cung cấp các method thể hiện ngữ nghĩa riêng của transaction, gồm Commit và Rollback, cũng như các method bạn dùng để thực hiện những thao tác cơ sở dữ liệu thông dụng.

Huỷ các thao tác cơ sở dữ liệu đang chạy

Dùng context.Context, bạn có thể khiến các lời gọi hàm và dịch vụ trong ứng dụng dừng sớm và trả về lỗi khi việc xử lý của chúng không còn cần thiết nữa.

Quản lý kết nối

Với một số chương trình nâng cao, bạn có thể cần tinh chỉnh các tham số của connection pool hoặc làm việc trực tiếp với từng kết nối.

Tránh rủi ro SQL injection

Bạn có thể tránh rủi ro SQL injection bằng cách truyền giá trị tham số SQL dưới dạng đối số hàm của package sql

Phát triển module

Phát triển và công bố module

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

Quy trình phát hành và đánh phiên bản module

Khi bạn phát triển module cho các lập trình viên khác dùng, bạn có thể theo một quy trình giúp bảo đảm trải nghiệm đáng tin cậy và nhất quán cho những người dùng module đó. Chủ đề này mô tả các bước tổng quát trong quy trình ấy.

Quản lý mã nguồn của module

Khi bạn phát triển module để công bố cho người khác dùng, việc tuân theo các quy ước về repository mô tả trong chủ đề này sẽ giúp module của bạn dễ dùng hơn với các lập trình viên khác.

Tổ chức một module Go

Đâu là cách đúng để tổ chức tệp và thư mục trong một dự án Go điển hình? Chủ đề này bàn về một số bố cục thông dụng tuỳ theo loại module bạn có.

Phát triển bản cập nhật phiên bản major

Một bản cập nhật phiên bản major có thể gây xáo trộn lớn cho người dùng module của bạn, vì nó chứa các thay đổi phá vỡ tương thích và được xem là một module mới. Tìm hiểu thêm trong chủ đề này.

Công bố một module

Khi muốn cho các lập trình viên khác dùng được module của mình, bạn công bố nó để các công cụ Go thấy được. Sau khi bạn đã công bố module, những lập trình viên import các package của nó sẽ có thể giải quyết phụ thuộc vào module bằng cách chạy những lệnh như go get.

Đánh số phiên bản module

Người phát triển module dùng từng phần trong số phiên bản của module để báo hiệu mức độ ổn định và khả năng tương thích ngược của phiên bản đó. Với mỗi bản phát hành mới, số phiên bản phát hành của module phản ánh cụ thể bản chất những thay đổi của module kể từ bản phát hành trước.

Bài nói

A Video Tour of Go

Ba điều làm cho Go nhanh, thú vị và hiệu quả: interface, reflection và tính đồng thời. Bài nói xây dựng một trình thu thập web đơn giản để minh hoạ những điều này.

Code that grows with grace

Một trong những mục tiêu thiết kế then chốt của Go là khả năng thích nghi của mã; rằng phải dễ dàng lấy một thiết kế đơn giản rồi xây dựng tiếp lên nó một cách sạch sẽ và tự nhiên. Trong bài nói này, Andrew Gerrand mô tả một server “chat roulette” đơn giản ghép đôi các kết nối TCP đến, rồi dùng các cơ chế đồng thời, interface và thư viện chuẩn của Go để mở rộng nó với giao diện web cùng nhiều tính năng khác. Dù chức năng của chương trình thay đổi rất nhiều, tính linh hoạt của Go vẫn giữ nguyên được thiết kế ban đầu trong lúc chương trình lớn dần.

Go Concurrency Patterns

Tính đồng thời là chìa khoá để thiết kế các dịch vụ mạng hiệu năng cao. Các cơ chế đồng thời nguyên thuỷ của Go (goroutine và channel) mang lại một cách diễn đạt việc thực thi đồng thời vừa đơn giản vừa hiệu quả. Trong bài nói này, chúng tôi cho thấy những bài toán đồng thời hóc búa có thể được giải một cách thanh thoát bằng mã Go đơn giản.

Advanced Go Concurrency Patterns

Bài nói này mở rộng bài Go Concurrency Patterns để đi sâu hơn vào các cơ chế đồng thời nguyên thuỷ của Go.

Thêm nữa

Xem trang Go Talks và trang wiki để có thêm nhiều bài nói về Go.

Codewalks

Những chuyến tham quan có hướng dẫn qua các chương trình Go.

Ngôn ngữ

Packages

Modules

Công cụ

Wiki

Go Wiki, do cộng đồng Go duy trì, gồm các bài viết về ngôn ngữ Go, công cụ và những tài nguyên khác.

Xem trang Learn tại Wiki để có thêm tài nguyên học Go.

Tài liệu ngoài tiếng Anh

Xem trang NonEnglish tại Wiki để tìm tài liệu đã được bản địa hoá.

Mở trong cửa sổ mới.

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.