Tài liệu
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 có tính biểu đạt cao, súc tích, rõ ràng và hiệu quả. Các cơ chế đồng thời của nó giúp dễ dàng viết các chương trình tận dụng tối đa các máy đa nhân và máy nối mạng, trong khi hệ thống kiểu mới lạ của nó cho phép xây dựng chương trình linh hoạt và theo module. Go biên dịch nhanh chóng thành mã máy nhưng vẫn có sự tiện lợi của bộ gom rác và sức mạnh của reflection tại runtime. Đây là ngôn ngữ nhanh, kiểu tĩnh, được biên dịch nhưng cảm giác như ngôn ngữ kiểu động, được thông dịch.
Bắt đầu
Cài đặt Go
Hướng dẫn tải xuống và cài đặt Go.
Hướng dẫn: Bắt đầu
Hướng dẫn Hello, World ngắn gọn để bắt đầu. Tìm hiểu một chút về mã Go, công cụ, gói và module.
Hướng dẫn: Tạo một module
Hướng dẫn các chủ đề ngắn giới thiệu 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 đa module
Giới thiệu những điều cơ bản về tạo và sử dụng workspace đa module trong Go. Workspace đa module hữu ích để thực hiện thay đổi trên nhiều module.
Hướng dẫn: Phát triển RESTful API với Go và Gin
Giới thiệu những điều cơ bản về viết API web service kiểu 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à sử dụng các hàm hoặc kiểu được viết để hoạt động với bất kỳ tập hợp kiểu nào được cung cấp bởi mã gọi.
Hướng dẫn: Bắt đầu với fuzzing
Fuzzing có thể tạo ra các đầu vào cho bài kiểm thử của bạn, có thể phát hiện các trường hợp biên và vấn đề bảo mật mà bạn có thể đã bỏ lỡ.
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 tập hợp đơn giản các gói Go bên trong một module,
và nó cho thấy cách sử dụng go command
để xây dựng và kiểm thử các gói.
Tour Go
Giới thiệu tương tác về Go trong bốn phần. Phần đầu tiên bao gồm cú pháp cơ bản và cấu trúc dữ liệu; phần thứ hai thảo luận về phương thức và interface; phần thứ ba về Generics; và phần thứ tư giới thiệu các primitive đồng thời của Go. Mỗi phần kết thúc bằng một vài bài tập để bạn thực hành những gì bạn đã học. Bạn có thể tham gia tour trực tuyến hoặc cài đặt cục bộ bằng:
$ go install golang.org/x/website/tour@latest
Thao tác này sẽ đặt tệp nhị phân tour vào thư mục bin của
GOPATH của bạn.
Sử dụng và hiểu Go
Effective Go
Tài liệu cung cấp các gợi ý để viết mã Go rõ ràng, chuẩn mực. Bắt buộc đọc đối với bất kỳ lập trình viên Go mới nào. Nó bổ sung cho tour và đặc tả ngôn ngữ, cả hai đều nên đọc trước.
Câu hỏi thường gặp (FAQ)
Trả lời các câu hỏi thường gặp về Go.
Plugin trình soạn thảo và IDE
Tài liệu tóm tắt 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 tắt 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ề Bộ gom rác Go
Tài liệu mô tả cách Go quản lý bộ nhớ và cách tận dụng tốt nhất.
Quản lý dependency
Khi mã của bạn sử dụng các gói bên ngoài, những gói đó (được phân phối dưới dạng module) trở thành dependency.
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ử coverage cho ứng dụng Go.
Tối ưu hóa dựa trên hồ sơ thực thi
Trang tài liệu chính về tối ưu hóa dựa trên hồ sơ thực thi (PGO) cho ứng dụng Go.
Tham khảo
Tài liệu gói
Tài liệu cho thư viện chuẩn Go.
Tài liệu lệnh
Tài liệu cho các công cụ 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 Go Modules
Tài liệu tham khảo chi tiết cho hệ thống quản lý dependency của Go.
Tài liệu tham khảo tệp go.mod
Tài liệu tham khảo cho các chỉ thị có trong tệp go.mod.
Mô hình bộ nhớ Go
Tài liệu xác định các điều kiện mà các lần đọc một biến trong một goroutine có thể được đảm bảo quan sát các giá trị do các lần ghi vào cùng biến đó trong một goroutine khác tạo ra.
Hướng dẫn đóng góp
Đóng góp cho Go.
Lịch sử phát hành
Tóm tắt các thay đổi giữa các 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ề truy cập cơ sở dữ liệu quan hệ sử dụng Go và gói
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ở database handle
Bạn sử dụng database handle của Go để thực thi các thao tác cơ sở dữ liệu. Sau khi mở 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 mặt bạn.
Thực thi câu lệnh SQL không trả về dữ liệu
Đối với các thao tác SQL có thể thay đổi cơ sở dữ liệu, bao gồm SQL
INSERT, UPDATE và DELETE, bạn sử dụng
các phương thức Exec.
Truy vấn dữ liệu
Đối với các câu lệnh SELECT trả về dữ liệu từ truy vấn, sử dụng phương thức
Query hoặc QueryRow.
Sử dụng prepared statement
Định nghĩa một prepared statement để dùng lại có thể giúp mã của bạn chạy nhanh hơn một chút bằng cách tránh overhead của việc tạo lại câu lệnh mỗi lần mã của bạn thực hiện thao tác cơ sở dữ liệu.
Thực thi transaction
sql.Tx xuất ra các phương thức biểu diễn ngữ nghĩa dành riêng cho transaction,
bao gồm Commit và Rollback, cũng như các phương thức bạn
dùng để thực hiện các thao tác cơ sở dữ liệu phổ biến.
Hủy các thao tác cơ sở dữ liệu đang thực hiện
Sử dụng context.Context, bạn có thể khiến các lời gọi hàm và dịch vụ của ứng dụng dừng hoạt động sớm và trả về lỗi khi quá trình xử lý của chúng không còn cần thiết nữa.
Quản lý kết nối
Đối với một số chương trình nâng cao, bạn có thể cần điều chỉnh các tham số connection pool hoặc làm việc với các kết nối một cách tường minh.
Tránh rủi ro SQL injection
Bạn có thể tránh rủi ro SQL injection bằng cách cung cấp các giá trị tham số SQL dưới dạng
đối số hàm của gói sql.
Phát triển module
Phát triển và xuất bản module
Bạn có thể tập hợp các gói liên quan vào module, sau đó xuất bản các module để các nhà phát triển khác sử dụng. Chủ đề này cung cấp tổng quan về việc phát triển và xuất bản module.
Quy trình phát hành và đánh phiên bản module
Khi bạn phát triển module để các nhà phát triển khác sử dụng, bạn có thể tuân theo một quy trình giúp đảm bảo trải nghiệm đáng tin cậy, nhất quán cho các nhà phát triển sử dụng module. Chủ đề này mô tả các bước cấp cao trong quy trình đó.
Quản lý mã nguồn module
Khi bạn đang phát triển module để xuất bản cho người khác sử dụng, bạn có thể giúp đảm bảo rằng module của mình dễ dùng hơn cho các nhà phát triển khác bằng cách tuân theo các quy ước kho lưu trữ được mô tả trong chủ đề này.
Tổ chức một module Go
Cách đúng đắn để tổ chức các tệp và thư mục trong một dự án Go điển hình là gì? Chủ đề này thảo luận về một số bố cục phổ biến tùy thuộc vào loại module bạn có.
Phát triển bản cập nhật phiên bản lớn
Cập nhật phiên bản lớn có thể rất gây gián đoạn cho người dùng module của bạn vì nó bao gồm các thay đổi phá vỡ tương thích và đại diện cho một module mới. Tìm hiểu thêm trong chủ đề này.
Xuất bản một module
Khi bạn muốn một module có sẵn cho các nhà phát triển khác, bạn xuất bản nó để nó hiển thị với các công cụ Go. Sau khi bạn xuất bản module, các nhà phát triển import các gói của nó sẽ có thể giải quyết dependency vào module bằng cách chạy các lệnh như go get.
Đánh số phiên bản module
Nhà phát triển của một module sử dụng mỗi phần của số phiên bản module để báo hiệu sự ổn định và khả năng tương thích ngược của phiên bản. Đối 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 của các thay đổi trong module kể từ bản phát hành trước.
Talks
Video Tour về Go
Ba điều làm cho Go nhanh, thú vị và hiệu quả: interface, reflection và đồng thời. Xây dựng một web crawler đơn giản để minh họa những điều này.
Mã phát triển một cách duyên dáng
Một trong những mục tiêu thiết kế chính của Go là tính thích nghi của mã; tức là nên dễ dàng lấy một thiết kế đơn giản và xây dựng trên nó theo cách sạch sẽ và tự nhiên. Trong talk này, Andrew Gerrand mô tả một máy chủ "chat roulette" đơn giản ghép các cặp kết nối TCP đến, sau đó sử 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 và các tính năng khác. Trong khi chức năng của chương trình thay đổi đáng kể, tính linh hoạt của Go vẫn bảo tồn thiết kế ban đầu khi nó phát triển.
Các mẫu đồng thời Go
Đồng thời là chìa khóa để thiết kế các dịch vụ mạng hiệu suất cao. Các primitive đồng thời của Go (goroutine và channel) cung cấp phương tiện đơn giản và hiệu quả để biểu đạt thực thi đồng thời. Trong talk này, chúng ta thấy cách các vấn đề đồng thời phức tạp có thể được giải quyết một cách duyên dáng với mã Go đơn giản.
Các mẫu đồng thời Go nâng cao
Talk này mở rộng talk Các mẫu đồng thời Go để đi sâu hơn vào các primitive đồng thời của Go.
Thêm
Xem trang Go Talks và trang wiki để xem thêm các talk Go.
Codewalk
Các tour có hướng dẫn qua các chương trình Go.
Ngôn ngữ
- JSON-RPC: câu chuyện về interface
- Cú pháp khai báo của Go
- Defer, Panic và Recover
- Các mẫu đồng thời Go: Timeout và chuyển tiếp
- Slice Go: cách dùng và nội bộ
- Bộ giải mã GIF: bài tập về interface trong Go
- Xử lý lỗi và Go
Gói
- JSON và Go - sử dụng gói json.
- Gobs of data - thiết kế và sử dụng gói gob.
- Các quy luật của Reflection - những điều cơ bản về gói reflect.
- Gói image của Go - những điều cơ bản về gói image.
- Gói image/draw của Go - những điều cơ bản về gói image/draw.
Module
- Sử dụng Go Modules - giới thiệu về việc dùng module trong một dự án đơn giản.
- Chuyển đổi sang Go Modules - chuyển đổi một dự án hiện có để sử dụng module.
- Xuất bản Go Modules - cách tạo ra các phiên bản mới của module cho người khác.
- Go Modules: v2 và cao hơn - tạo và xuất bản các phiên bản lớn 2 trở lên.
- Giữ cho Module của bạn tương thích - cách giữ module của bạn tương thích với các phiên bản minor/patch trước.
Công cụ
- Về lệnh go - tại sao chúng tôi viết nó, nó là gì, nó không phải là gì và cách sử dụng nó.
- Chú thích tài liệu Go - viết tài liệu chương trình tốt
- Gỡ lỗi mã Go với GDB
- Bộ phát hiện Data Race - hướng dẫn sử dụng bộ phát hiện data race.
- Hướng dẫn nhanh về Assembler của Go - giới thiệu về assembler được 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ác công cụ đo lường mức sử dụng CPU và bộ nhớ của mã
- Giới thiệu Go Race Detector - giới thiệu về race detector.
- Gopls: Language server cho Go - tận dụng tối đa trình soạn thảo khi làm việc với Go.
Wiki
Go Wiki, được duy trì bởi cộng đồng Go, bao gồm các bài viết về ngôn ngữ Go, công cụ và các tài nguyên khác.