Tutorial: Create a Go module

Đây là phần đầu tiên của một bài hướng dẫn giới thiệu một số tính năng cơ bản của ngôn ngữ Go. Nếu bạn mới bắt đầu với Go, hãy nhớ xem Hướng dẫn: Bắt đầu với Go, bài này giới thiệu lệnh go, Go modules và mã Go rất đơn giản.

Trong bài hướng dẫn này, bạn sẽ tạo hai module. Module đầu tiên là một thư viện được thiết kế để các thư viện hoặc ứng dụng khác import. Module thứ hai là một ứng dụng gọi sẽ sử dụng module đầu tiên.

Chuỗi bài hướng dẫn này gồm bảy chủ đề ngắn, mỗi chủ đề minh họa một phần khác nhau của ngôn ngữ.

  1. Tạo một module -- Viết một module nhỏ với các hàm mà bạn có thể gọi từ một module khác.
  2. Gọi mã của bạn từ một module khác -- Import và sử dụng module mới của bạn.
  3. Trả về và xử lý một lỗi -- Thêm xử lý lỗi đơn giản.
  4. Trả về một lời chào ngẫu nhiên -- Xử lý dữ liệu trong slice (mảng có kích thước thay đổi động của Go).
  5. Trả về lời chào cho nhiều người -- Lưu các cặp khóa/giá trị trong một map.
  6. Thêm một bài kiểm thử -- Sử dụng các tính năng kiểm thử đơn vị có sẵn của Go để kiểm thử mã của bạn.
  7. Biên dịch và cài đặt ứng dụng -- Biên dịch và cài đặt mã của bạn cục bộ.

Điều kiện tiên quyết

Bắt đầu một module mà người khác có thể sử dụng

Bắt đầu bằng cách tạo một Go module. Trong một module, bạn tập hợp một hoặc nhiều package liên quan để cung cấp một tập hợp chức năng hữu ích và riêng biệt. Ví dụ, bạn có thể tạo một module với các package có các hàm để thực hiện phân tích tài chính để những người khác viết ứng dụng tài chính có thể sử dụng công việc của bạn. Để biết thêm về việc phát triển module, xem Phát triển và xuất bản module.

Mã Go được nhóm thành các package, và các package được nhóm thành các module. Module của bạn chỉ định các dependency cần thiết để chạy mã của bạn, bao gồm phiên bản Go và tập hợp các module khác mà nó yêu cầu.

Khi bạn thêm hoặc cải thiện chức năng trong module của mình, bạn xuất bản các phiên bản mới của module. Các nhà phát triển viết mã gọi các hàm trong module của bạn có thể import các package đã cập nhật của module và kiểm thử với phiên bản mới trước khi đưa nó vào sử dụng trong môi trường production.

  1. Mở dấu nhắc lệnh và cd đến 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 greetings cho mã nguồn Go module của bạn.

    Ví dụ, từ thư mục home của bạn, sử dụng các lệnh sau:

    mkdir greetings
    cd greetings
    
  3. Bắt đầu module của bạn bằng cách sử dụng go mod init command.

    Chạy lệnh go mod init, cung cấp đường dẫn module của bạn -- ở đây, sử dụng example.com/greetings. Nếu bạn xuất bản một module, đường dẫn này phải là đường dẫn mà Go tools có thể tải module của bạn xuống. Đó sẽ là kho lưu trữ của mã của bạn.

    Để biết thêm về việc đặt tên module bằng đường dẫn module, xem Quản lý dependency.

    $ go mod init example.com/greetings
    go: creating new go.mod: module example.com/greetings
    

    Lệnh go mod init tạo một tệp go.mod để theo dõi các dependency của mã của bạn. Cho đến thời điểm này, tệp chỉ bao gồm tên module của bạn và phiên bản Go mà mã của bạn hỗ trợ. Nhưng khi bạn thêm dependency, tệp go.mod sẽ liệt kê các phiên bản mà mã của bạn phụ thuộc vào. Điều này giữ cho các bản build có thể tái tạo và cho phép bạn kiểm soát trực tiếp các phiên bản module sẽ sử dụng.

  4. Trong trình soạn thảo văn bản của bạn, tạo một tệp để viết mã và đặt tên là greetings.go.
  5. Dán mã sau vào tệp greetings.go và lưu tệp.
    package greetings
    
    import "fmt"
    
    // Hello trả về lời chào cho người có tên được chỉ định.
    func Hello(name string) string {
        // Trả về lời chào chứa tên trong một thông điệp.
        message := fmt.Sprintf("Hi, %v. Welcome!", name)
        return message
    }
    

    Đây là mã đầu tiên cho module của bạn. Nó trả về lời chào cho bất kỳ trình gọi nào yêu cầu. Bạn sẽ viết mã gọi hàm này trong bước tiếp theo.

    Trong mã này, bạn:

    • Khai báo một package greetings để tập hợp các hàm liên quan.
    • Triển khai một hàm Hello để trả về lời chào.

      Hàm này nhận một tham số name có kiểu là string. Hàm cũng trả về một string. Trong Go, một hàm có tên bắt đầu bằng chữ cái viết hoa có thể được gọi bởi một hàm không nằm trong cùng package. Điều này được gọi trong Go là tên được export. Để biết thêm về các tên được export, xem Tên được export trong Go tour.

    • Khai báo biến message để chứa lời chào của bạn.

      Trong Go, toán tử := là cách viết tắt để khai báo và khởi tạo một biến trong một dòng (Go sử dụng giá trị ở bên phải để xác định kiểu của biến). Viết theo cách đầy đủ, bạn có thể đã viết như sau:

      var message string
      message = fmt.Sprintf("Hi, %v. Welcome!", name)
      
    • Sử dụng hàm Sprintf của package fmt để tạo một thông điệp chào. Đối số đầu tiên là một chuỗi định dạng, và Sprintf thay thế giá trị của tham số name cho động từ định dạng %v. Việc chèn giá trị của tham số name hoàn tất nội dung lời chào.
    • Trả về nội dung lời chào đã được định dạng cho trình gọi.

Trong bước tiếp theo, bạn sẽ gọi hàm này từ một module khác.