Gọi mã của bạn từ một module khác

Trong phần trước, bạn đã tạo một module greetings. Trong phần này, bạn sẽ viết mã để gọi hàm Hello trong module bạn vừa viết. Bạn sẽ viết mã có thể thực thi như một ứng dụng và gọi mã trong module greetings.

  1. Tạo thư mục hello cho mã nguồn module Go của bạn. Đây là nơi bạn sẽ viết phần gọi hàm.

    Sau khi tạo thư mục này, bạn sẽ có cả thư mục hello và greetings ở cùng cấp trong cấu trúc thư mục, như sau:

    <home>/
     |-- greetings/
     |-- hello/

    Ví dụ, nếu dấu nhắc lệnh của bạn đang ở thư mục greetings, bạn có thể dùng các lệnh sau:

    cd ..
    mkdir hello
    cd hello
    
  2. Bật tính năng theo dõi dependency cho mã bạn sắp viết.

    Để bật theo dõi dependency cho mã của bạn, hãy chạy lệnh go mod init, truyền vào tên của module mà mã của bạn sẽ nằm trong đó.

    Trong hướng dẫn này, hãy dùng example.com/hello làm đường dẫn module.

    $ go mod init example.com/hello
    go: creating new go.mod: module example.com/hello
    
  3. Trong trình soạn thảo văn bản, trong thư mục hello, tạo một tệp để viết mã và đặt tên là hello.go.
  4. Viết mã để gọi hàm Hello, rồi in giá trị trả về của hàm.

    Để làm điều đó, hãy dán đoạn mã sau vào hello.go.

    package main
    
    import (
        "fmt"
    
        "example.com/greetings"
    )
    
    func main() {
        // Get a greeting message and print it.
        message := greetings.Hello("Gladys")
        fmt.Println(message)
    }
    

    Trong đoạn mã này, bạn:

    • Khai báo gói main. Trong Go, mã được thực thi như một ứng dụng phải nằm trong gói main.
    • Import hai gói: example.com/greetingsgói fmt. Điều này cho phép mã của bạn truy cập các hàm trong những gói đó. Import example.com/greetings (gói chứa trong module bạn đã tạo trước đó) cho phép bạn truy cập hàm Hello. Bạn cũng import fmt, với các hàm để xử lý văn bản đầu vào và đầu ra (chẳng hạn in văn bản ra console).
    • Lấy lời chào bằng cách gọi hàm Hello của gói greetings.
  5. Chỉnh sửa module example.com/hello để sử dụng module example.com/greetings cục bộ của bạn.

    Trong môi trường production, bạn sẽ publish module example.com/greetings từ kho lưu trữ của nó (với đường dẫn module phản ánh vị trí đã publish), nơi các công cụ Go có thể tìm và tải xuống. Tuy nhiên, vì bạn chưa publish module, bạn cần điều chỉnh module example.com/hello để nó có thể tìm thấy mã example.com/greetings trên hệ thống tệp cục bộ của bạn.

    Để làm điều đó, hãy dùng lệnh go mod edit để chỉnh sửa module example.com/hello nhằm chuyển hướng các công cụ Go từ đường dẫn module của nó (nơi module chưa có) sang thư mục cục bộ (nơi module đang có).

    1. Từ dấu nhắc lệnh trong thư mục hello, chạy lệnh sau:
      $ go mod edit -replace example.com/greetings=../greetings
      

      Lệnh này chỉ định rằng example.com/greetings cần được thay thế bằng ../greetings để xác định vị trí dependency. Sau khi chạy lệnh, tệp go.mod trong thư mục hello sẽ chứa một chỉ thị replace:

      module example.com/hello
      
      go 1.16
      
      replace example.com/greetings => ../greetings
      
    2. Từ dấu nhắc lệnh trong thư mục hello, chạy lệnh go mod tidy để đồng bộ hóa các dependency của module example.com/hello, thêm những dependency mà mã yêu cầu nhưng chưa được theo dõi trong module.
      $ go mod tidy
      go: found example.com/greetings in example.com/greetings v0.0.0-00010101000000-000000000000
      

      Sau khi lệnh hoàn tất, tệp go.mod của module example.com/hello sẽ trông như sau:

      module example.com/hello
      
      go 1.16
      
      replace example.com/greetings => ../greetings
      
      require example.com/greetings v0.0.0-00010101000000-000000000000

      Lệnh đã tìm thấy mã cục bộ trong thư mục greetings, rồi thêm một chỉ thị require để chỉ định rằng example.com/hello yêu cầu example.com/greetings. Bạn đã tạo ra dependency này khi import gói greetings trong hello.go.

      Số theo sau đường dẫn module là một số phiên bản giả -- một số được tạo ra để thay thế số phiên bản ngữ nghĩa (mà module chưa có).

      Để tham chiếu đến một module đã publish, tệp go.mod thường bỏ qua chỉ thị replace và dùng chỉ thị require với số phiên bản được gắn thẻ ở cuối.

      require example.com/greetings v1.1.0

      Để biết thêm về số phiên bản, xem Đánh số phiên bản module.

  6. Tại dấu nhắc lệnh trong thư mục hello, chạy mã của bạn để xác nhận nó hoạt động.
    $ go run .
    Hi, Gladys. Welcome!
    

Chúc mừng! Bạn đã viết hai module hoạt động được.

Trong phần tiếp theo, bạn sẽ thêm một số xử lý lỗi.