☰ 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)

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

Bản dịch từ go.dev/doc/tutorial/getting-started

Trong bài hướng dẫn này, bạn sẽ được giới thiệu sơ lược về lập trình Go. Trên đường đi, bạn sẽ:

  • Cài đặt Go (nếu bạn chưa cài).
  • Viết một đoạn mã “Hello, world” đơn giản.
  • Dùng lệnh go để chạy mã của bạn.
  • Dùng công cụ tìm kiếm package của Go để tìm những package bạn có thể dùng trong mã của mình.
  • Gọi hàm từ một module bên ngoài.

Lưu ý: Xem các bài hướng dẫn khác tại Hướng dẫn.

Yêu cầu trước khi bắt đầu

  • Một chút kinh nghiệm lập trình. Mã ở đây khá đơn giản, nhưng sẽ dễ hơn nếu bạn đã biết đôi chút về hàm.
  • Một công cụ để soạn mã. Bất kỳ trình soạn thảo văn bản nào bạn có đều dùng được. Hầu hết trình soạn thảo đều hỗ trợ Go tốt. Phổ biến nhất là VSCode (miễn phí), GoLand (trả phí) và Vim (miễn phí).
  • Một cửa sổ dòng lệnh. Go chạy tốt với mọi terminal trên Linux và Mac, và với PowerShell hoặc cmd trên Windows.

Cài đặt Go

Bạn chỉ cần làm theo các bước tại Tải về và cài đặt.

Viết một chút mã

Hãy bắt đầu với Hello, World.

  1. Mở cửa sổ dòng lệnh và cd về thư mục home của bạn.

    Trên Linux hoặc Mac:

    cd

    Trên Windows:

    cd %HOMEPATH%
  2. Tạo thư mục hello cho mã nguồn Go đầu tiên của bạn.

    Ví dụ, dùng các lệnh sau:

    mkdir hello
    cd hello
  3. Bật theo dõi phụ thuộc cho mã của bạn.

    Khi mã của bạn import những package nằm trong các module khác, bạn quản lý các phụ thuộc đó thông qua module của chính mã bạn. Module đó được định nghĩa bởi một tệp go.mod, nơi theo dõi các module cung cấp những package kia. Tệp go.mod này đi cùng mã của bạn, bao gồm cả trong repository mã nguồn.

    Để bật theo dõi phụ thuộc bằng cách tạo tệp go.mod, hãy chạy lệnh go mod init, kèm theo tên của module mà mã của bạn sẽ nằm trong đó. Tên này chính là module path của module.

    Trong phát triển thực tế, module path thường là vị trí repository nơi mã nguồn của bạn được lưu giữ. Ví dụ, module path có thể là github.com/mymodule. Nếu bạn dự định publish module của mình cho người khác dùng, module path bắt buộc phải là một vị trí mà từ đó các công cụ Go có thể tải module của bạn về. Tìm hiểu thêm về cách đặt tên module bằng module path tại Quản lý phụ thuộc.

    Trong phạm vi bài hướng dẫn này, bạn chỉ cần dùng example/hello.

    $ go mod init example/hello
    go: creating new go.mod: module example/hello
  4. Trong trình soạn thảo, hãy tạo tệp hello.go để viết mã.

  5. Dán đoạn mã sau vào tệp hello.go rồi lưu lại.

    package main
    
    import "fmt"
    
    func main() {
        fmt.Println("Hello, World!")
    }

    Đây là mã Go của bạn. Trong đoạn mã này, bạn:

    • Khai báo package main (package là cách nhóm các hàm lại với nhau, và nó gồm toàn bộ các tệp nằm trong cùng một thư mục).
    • Import package fmt rất phổ biến, chứa các hàm để định dạng văn bản, bao gồm cả việc in ra console. Package này là một trong các package thuộc thư viện chuẩn mà bạn có được khi cài đặt Go.
    • Hiện thực hàm main để in một thông điệp ra console. Hàm main được thực thi mặc định khi bạn chạy package main.
  6. Chạy mã của bạn để xem lời chào.

    $ go run .
    Hello, World!

    Lệnh go run là một trong rất nhiều lệnh go mà bạn sẽ dùng để làm việc với Go. Dùng lệnh sau để xem danh sách các lệnh còn lại:

    $ go help

Gọi mã trong một package bên ngoài

Khi bạn cần mã của mình làm một việc mà có thể ai đó đã hiện thực sẵn, bạn có thể tìm một package có sẵn các hàm dùng được cho mã của bạn.

  1. Hãy làm cho thông điệp được in ra thú vị hơn một chút bằng một hàm từ module bên ngoài.

    1. Truy cập pkg.go.dev và tìm package “quote”.
    2. Trong kết quả tìm kiếm, tìm và nhấn vào phiên bản v1 của package rsc.io/quote (nó sẽ được liệt kê cùng với mục “Other major versions” là rsc.io/quote/v4).
    3. Trong phần Documentation, ở mục Index, hãy để ý danh sách các hàm bạn có thể gọi từ mã của mình. Bạn sẽ dùng hàm Go.
    4. Ở đầu trang này, hãy để ý rằng package quote nằm trong module rsc.io/quote.

    Bạn có thể dùng trang pkg.go.dev để tìm các module đã được publish, có chứa những package với các hàm dùng được cho mã của bạn. Package được publish bên trong module – chẳng hạn rsc.io/quote – để người khác dùng được. Module được cải tiến qua từng phiên bản mới theo thời gian, và bạn có thể nâng cấp mã của mình để dùng các phiên bản đã cải tiến đó.

  2. Trong mã Go của bạn, hãy import package rsc.io/quote và thêm lời gọi tới hàm Go của nó.

    Sau khi thêm những dòng được đánh dấu, mã của bạn sẽ chứa nội dung như sau:

    package main
    
    import "fmt"
    
    import "rsc.io/quote"
    
    func main() {
        fmt.Println(quote.Go())
    }
  3. Thêm yêu cầu module mới và các giá trị checksum.

    Go sẽ thêm module quote vào danh sách yêu cầu, đồng thời tạo tệp go.sum dùng để xác thực module. Tìm hiểu thêm tại Xác thực module trong tài liệu tham khảo Go Modules.

    $ go mod tidy
    go: finding module for package rsc.io/quote
    go: found rsc.io/quote in rsc.io/quote v1.5.2
  4. Chạy mã của bạn để xem thông điệp do hàm bạn vừa gọi sinh ra.

    $ go run .
    Don't communicate by sharing memory, share memory by communicating.

    Hãy để ý rằng mã của bạn gọi hàm Go, và nó in ra một thông điệp thú vị về giao tiếp.

    Khi bạn chạy go mod tidy, lệnh này đã tìm và tải về module rsc.io/quote chứa package mà bạn đã import. Mặc định, nó tải phiên bản mới nhất – v1.5.2.

Viết thêm mã

Qua phần giới thiệu nhanh này, bạn đã cài đặt được Go và học một vài điều cơ bản. Để viết thêm mã với một bài hướng dẫn khác, hãy xem Tạo một Go module.

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.