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.
-
Tạo thư mục
hellocho 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
-
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/hellolàm đường dẫn module.$ go mod init example.com/hello go: creating new go.mod: module example.com/hello
- 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.
-
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óimain. -
Import hai gói:
example.com/greetingsvà góifmt. Điều này cho phép mã của bạn truy cập các hàm trong những gói đó. Importexample.com/greetings(gói chứa trong module bạn đã tạo trước đó) cho phép bạn truy cập hàmHello. Bạn cũng importfmt, 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
Hellocủa góigreetings.
-
Khai báo gói
-
Chỉnh sửa module
example.com/hellođể sử dụng moduleexample.com/greetingscục bộ của bạn.Trong môi trường production, bạn sẽ publish module
example.com/greetingstừ 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 moduleexample.com/hellođể nó có thể tìm thấy mãexample.com/greetingstrê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 moduleexample.com/hellonhằ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ó).-
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/greetingscầ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
-
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 moduleexample.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/hellosẽ 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ằngexample.com/helloyêu cầuexample.com/greetings. Bạn đã tạo ra dependency này khi import góigreetingstrong 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ị
replacevà dùng chỉ thịrequirevớ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.
-
Từ dấu nhắc lệnh trong thư mục hello, chạy lệnh sau:
-
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.