Ở phần trước, bạn đã tạo module greetings. Trong phần này, bạn sẽ viết mã để gọi hàm Hello trong module vừa viết. Bạn sẽ viết mã có thể chạy được như một ứng dụng, và mã đó gọi vào module greetings.
Lưu ý: Chủ đề này là một phần của loạt hướng dẫn nhiều phần, bắt đầu từ Tạo một Go module.
-
Tạo thư mục
hellocho mã nguồn Go module của bạn. Đây là nơi bạn sẽ viết phía gọi.Sau khi tạo thư mục này, bạn sẽ có cả thư mục hello và thư mục greetings nằm cùng cấp trong cây thư mục, như sau:
<home>/ |-- greetings/ |-- hello/Ví dụ, nếu dòng lệnh của bạn đang ở trong thư mục greetings, bạn có thể dùng các lệnh sau:
cd .. mkdir hello cd hello -
Bật theo dõi phụ thuộc cho đoạn mã bạn sắp viết.
Để bật theo dõi phụ thuộc, hãy chạy lệnh
go mod init, kèm theo tên module mà mã của bạn sẽ nằm trong đó.Trong phạm vi bài hướng dẫn này, hãy dùng
example.com/hellolàm module path.$ go mod init example.com/hello go: creating new go.mod: module example.com/hello -
Trong trình soạn thảo, ở thư mục hello, hãy 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 ra 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 package
main. Trong Go, mã được chạy như một ứng dụng bắt buộc phải nằm trong packagemain. - Import hai package:
example.com/greetingsvà packagefmt. Việc này cho phép mã của bạn truy cập các hàm trong những package đó. Importexample.com/greetings(package nằm trong module bạn đã tạo trước đó) cho bạn quyền truy cập hàmHello. Bạn cũng importfmt, chứa 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 một lời chào bằng cách gọi hàm
Hellocủa packagegreetings.
- Khai báo package
-
Sửa module
example.com/hellođể nó dùng moduleexample.com/greetingscục bộ của bạn.Khi chạy thật, bạn sẽ publish module
example.com/greetingstừ repository của nó (với module path phản ánh vị trí đã publish), nơi các công cụ Go có thể tìm thấy và tải về. Còn hiện tại, vì bạn chưa publish module, bạn cần điều chỉnh moduleexample.com/hellođể nó tìm được mãexample.com/greetingstrên hệ thống tệp cục bộ.Để làm vậy, hãy dùng lệnh
go mod editđể sửa moduleexample.com/hello, chuyển hướng các công cụ Go từ module path (nơi không có module) sang thư mục cục bộ (nơi thật sự có module).-
Từ dòng lệnh trong thư mục hello, chạy lệnh sau:
$ go mod edit -replace example.com/greetings=../greetingsLệnh này chỉ định rằng
example.com/greetingssẽ được thay bằng../greetingskhi cần định vị phụ thuộc. 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òng lệnh trong thư mục hello, chạy lệnh
go mod tidyđể đồng bộ các phụ thuộc của moduleexample.com/hello, bổ sung những phụ thuộc mà mã cần nhưng module chưa theo dõi.$ go mod tidy go: found example.com/greetings in example.com/greetings v0.0.0-00010101000000-000000000000Sau khi lệnh chạy xong, tệp go.mod của module
example.com/hellosẽ trông như thế này:module example.com/hello go 1.16 replace example.com/greetings => ../greetings require example.com/greetings v0.0.0-00010101000000-000000000000Lệnh đã tìm thấy mã cục bộ trong thư mục greetings, rồi thêm chỉ thị
requiređể chỉ định rằngexample.com/helloyêu cầuexample.com/greetings. Bạn đã tạo ra phụ thuộc này khi import packagegreetingstrong hello.go.Con số đứng sau module path là một pseudo-version number – số phiên bản được sinh tự động, dùng thay cho số phiên bản ngữ nghĩa (mà module này chưa có).
Để tham chiếu tới một module đã publish, tệp go.mod thường sẽ bỏ chỉ thị
replacevà dùng chỉ thịrequirevới số phiên bản đã gắn tag ở cuối.require example.com/greetings v1.1.0Tìm hiểu thêm về số phiên bản tại Đánh số phiên bản module.
-
-
Tại dòng 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 được hai module hoạt động được.
Ở chủ đề tiếp theo, bạn sẽ thêm phần xử lý lỗi.