ในการรันโปรแกรม GoLang จะต้องมีฟังก์ชัน main()
ที่กำหนดไว้ ในบางกรณีเมื่อพัฒนาโปรแกรมสาธิตที่มีหลายไฟล์และต้องการใส่ไว้ในแพ็กเกจ main
เดียวกัน และโฟลเดอร์นี้ไม่ได้อยู่ใน GOPATH
จะรันโปรแกรมอย่างไร
สมมติว่าเรามีโครงสร้างโฟลเดอร์ดังต่อไปนี้ โดยที่ฟังก์ชัน main()
ถูกกำหนดไว้ใน main.go
หากคุณเพียงแค่รันคำสั่งด้านล่าง โปรแกรมจะไม่สามารถเริ่มทำงานได้และจะแสดงข้อผิดพลาดหากมีการกำหนด struct บางอย่างในไฟล์อื่นและถูกใช้งาน
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
มีหลายวิธีในการรันโปรแกรมให้สำเร็จ
go run *.go
ในระบบปฏิบัติการ *nix บางระบบ รวมถึง Linux และ MacOS สามารถรัน go run *.go ซึ่งจะโหลดไฟล์ go ทั้งหมดในแพ็กเกจและรัน main()
แต่คำสั่งนี้ใช้ไม่ได้บน Windows เนื่องจาก token expansion ไม่ทำงานใน command line ของ 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 .
คล้ายกับคำสั่งด้านบน คำสั่งนี้จะพยายามโหลดไฟล์ทั้งหมดในโฟลเดอร์ปัจจุบันและรันฟังก์ชัน main()
และสามารถทำงานได้บน 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 มีวิธีที่สะดวกและรวดเร็วในการสร้างไบนารีที่สามารถเรียกใช้งานได้ เพื่อให้สามารถรันได้ง่ายด้วยคำสั่ง 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
นี่คือความสวยงามของ GoLang