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.
- Hàm hạng nhất trong Go
- Sinh văn bản tuỳ ý: thuật toán chuỗi Markov
- Chia sẻ bộ nhớ bằng cách giao tiếp
Ngôn ngữ
- JSON-RPC: câu chuyện về interface
- Cú pháp khai báo của Go
- Defer, Panic và Recover
- Go Concurrency Patterns: hết thời gian chờ và đi tiếp
- Go Slices: cách dùng và cơ chế bên trong
- Một bộ giải mã GIF: bài tập về interface trong Go
- Xử lý lỗi và Go
Packages
- Làm việc với JSON - dùng package json.
- Gobs of data - thiết kế và cách dùng package gob.
- Các quy luật của reflection - những điều căn bản về package reflect.
- Package image của Go - những điều căn bản về package image.
- Package image/draw của Go - những điều căn bản về package image/draw.
Modules
- Dùng Go Modules - giới thiệu cách dùng module trong một dự án đơn giản.
- Chuyển sang Go Modules - chuyển đổi một dự án sẵn có sang dùng module.
- Công bố Go Modules - cách đưa các phiên bản mới của module đến với người khác.
- Go Modules: v2 và hơn nữa - tạo và công bố các phiên bản major từ 2 trở lên.
- Giữ module của bạn tương thích - cách giữ module tương thích với các phiên bản minor/patch trước đó.
Công cụ
- Về lệnh go - vì sao chúng tôi viết nó, nó là gì, không là gì, và dùng nó ra sao.
- Chú thích tài liệu trong Go - viết tài liệu chương trình cho tốt
- Gỡ lỗi mã Go bằng GDB
- Bộ phát hiện data race - sổ tay về bộ phát hiện data race.
- Hướng dẫn nhanh về trình hợp dịch của Go - giới thiệu về trình hợp dịch mà Go sử dụng.
- C? Go? Cgo! - liên kết với mã C bằng cgo.
- Profiling chương trình Go - công cụ đo mức dùng CPU và bộ nhớ của mã bạn
- Giới thiệu bộ phát hiện race của Go - giới thiệu về bộ phát hiện race.
- Gopls: language server cho Go - tận dụng tối đa trình soạn thảo của bạn khi làm việc với Go.
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.