สวัสดีครับ ในบทความนี้ก็เป็น EP.2 แล้วนะครับ โดยเนื้อหาจะเป็นเรื่องเกี่ยวกับ Go module ว่าคืออะไร ใช้ทําอะไร และมีประโยชน์อย่างไร
สําหรับท่านใดที่ยังไม่ได้อ่าน EP.1 ท่านสามารถกลับไปอ่านก่อนได้นะครับที่นี่ Go EP.1 เริ่มต้นเรียนรู้ภาษา Go
Go module คืออะไร
โดยปกติแล้วในการเขียนโปรแกรมขึ้นมาสักตัวนึง จําเป็นจะต้อง Import Dependency เข้ามาใช้งาน ในหลายๆภาษา ตัวอย่างเช่น ภาษา JavaScript จะมีตัวจัดการ Dependency คือ node_module สําหรับในภาษา Go ก็เช่นกัน มี Go module เป็นตัวจัดการ Dependency ที่ Import เข้ามาใช้ใน Project โดย Go module เริ่มนํามาใช้ตั้งแต่ version 1.11 เป็นต้นมา
เริ่มต้นใช้ Go module
การใช้งาน Go module นั้นสามารถ Initial ได้โดยใช้คำสั่งนี้
$ go mod init github.com/mrthiti/go-module-example
*github.com/mrthiti/go-module-example คือชื่อของ module ที่ต้องการ ซึ่งเป็นชื่ออะไรก็ได้ครับ
เมื่อใช้คําสั่งนี้จะมีไฟล์ go.mod ถูกสร้างขึ้นมาโดยภายใน file ก็จะมีรายละเอียดของ module ประมาณนี้
module github.com/mrthiti/go-module-example
go 1.17
ต่อมา เราลองเขียนโปรแกรมง่ายๆขึ้นมาสักตัวนึงครับ โดยสร้างไฟล์ main.go ขึ้นมา แล้วเขียน Code ดังนี้
package main
import "fmt"
func main() {
fmt.Println("Hello Go")
}
แล้วลองรันดูครับก็จะได้ Hello Go แสดงผลออกมา ถึงตอนนี้เราก็ได้ Project ง่ายๆ ขึ้นมาแล้วครับ
ในขั้นตอนต่อไปเราจะลองเพิ่ม Dependency เข้ามาใช้ใน Project นี้กันครับ โดยตัวอย่าง่ายๆ เราจะเพิ่ม rsc.io/quote เข้ามาใช้งาน โดยสามารถใช้คําสั่งนี้ได้เลยครับ
$ go get rsc.io/quote
เมื่อใช้คําสั่งนี้ rsc.io/quote จะถูกโหลดลงมาบนเครื่องของเราทันที และสามารถ Import เข้าไปใช้งานได้เลยครับ ตามนี้
package main
import (
"fmt"
"rsc.io/quote"
)
func main() {
fmt.Println(quote.Hello())
}
เมื่อรันโปรแกรมจะได้ผลลัพธ์ “Hello, world.” ขึ้นมาแสดงว่าเราสามารถเรียกใช้งาน quote จาก rsc.io/quote ได้เรียบร้อย
ลองกลับมาดูที่ไฟล์ go.mod จะพบกับรายละเอียดของ Dependency ตามที่เราใช้คําสั่ง go get … เข้ามาใน project เราครับ
module github.com/mrthiti/go-module-example
go 1.17
require (
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c // indirect
rsc.io/quote v1.5.2 // indirect
rsc.io/sampler v1.3.0 // indirect
)
และเราจะพบไฟล์ go.sum ถูกสร้างขึ้นมา ประโยชน์ของไฟล์นี้ก็คือ เป็นไฟล์ที่เก็บ checksum เพื่อให้แน่ใจว่าเราโหลด Dependency ต่างๆมาถูกตัว หรือถูก version
คําสั่งอื่นๆที่ใช้จัดการ module มีดังนี้ครับ
- go list -m all ดู dependency ต่าง ๆ ที่ใช้งานใน module
- go get สำหรับเปลี่ยน version ของ dependency
- go mod tidy สำหรับลบ dependency ที่ไม่ได้ใช้ออกไปจาก module
ก็ประมาณนี้ครับสําหรับการใช้งาน Go module หวังว่าจะทําให้ทุกท่านเข้าใจมากขึ้นครับ
สําหรับ EP. ต่อไปจะเป็นเรื่อง Go EP.3 Go packages คืออะไร เข้าไปอ่านต่อได้เลยครับ
ขอให้สนุกกับการเขียนโปรแกรมนะครับ ขอบคุณครับ 😀