Để chạy một chương trình GoLang, cần phải có một hàm main()
được định nghĩa. Trong một số trường hợp khi phát triển một chương trình demo có nhiều file và chỉ muốn đặt chúng trong cùng một package main
và thư mục này không nằm trong GOPATH
, làm thế nào để chạy chương trình?
Giả sử chúng ta có cấu trúc thư mục sau, trong đó hàm main()
được định nghĩa trong main.go
.
Nếu bạn chỉ chạy lệnh bên dưới, nó sẽ không thể khởi động chương trình và đưa ra một số lỗi nếu một số struct được định nghĩa trong các file khác và đang được sử dụng.
PS D:\Project\Go\sourcecode_updater\v2> go run main.go
# command-line-arguments
.\main.go:35:11: undefined: Pool
.\main.go:76:12: undefined: UpdateJob
Có một vài cách để chạy chương trình thành công.
go run *.go
Trong một số hệ điều hành *nix bao gồm Linux và MacOS, có thể chạy go run *.go, lệnh này sẽ tải tất cả các file go trong package và chạy hàm main()
.
Nhưng lệnh này không hoạt động trên Windows vì việc mở rộng token không hoạt động trong dòng lệnh windows.
PS D:\Project\Go\sourcecode_updater\v2> go run *.go
CreateFile *.go: The filename, directory name, or volume label syntax is incorrect.
go run .
Tương tự như lệnh trên, lệnh này cũng sẽ cố gắng tải tất cả các file trong thư mục hiện tại và chạy hàm main()
và nó cũng có thể hoạt động trên Windows.
PS D:\Project\Go\sourcecode_updater\v2> go run .
all workers started
2021/05/15 23:15:54 start fetching posts to process
2021/05/15 23:15:54 start to process batch 1
go build
GoLang cung cấp một cách rất thuận tiện và nhanh chóng để tạo ra một binary có thể thực thi để có thể chạy dễ dàng bằng lệnh go build
.
PS D:\Project\Go\sourcecode_updater\v2> go build -o main.exe
PS D:\Project\Go\sourcecode_updater\v2> ./main
all workers started
2021/05/15 23:17:29 start fetching posts to process
2021/05/15 23:17:29 start to process batch 1
Đây là vẻ đẹp của GoLang.