avatar
thiti.dev
วงแหวนเว็บ
Search
Tags
My CV
Contact
Support me
Go EP.2 ทําความรู้จักกับ Go module
27 Aug 2021

สวัสดีครับ ในบทความนี้ก็เป็น 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/thiti-y/go-module-example

*github.com/thiti-y/go-module-example คือชื่อของ module ที่ต้องการ ซึ่งเป็นชื่ออะไรก็ได้ครับ

เมื่อใช้คําสั่งนี้จะมีไฟล์ go.mod ถูกสร้างขึ้นมาโดยภายใน file ก็จะมีรายละเอียดของ module ประมาณนี้

module github.com/thiti-y/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/thiti-y/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 คืออะไร เข้าไปอ่านต่อได้เลยครับ

ขอให้สนุกกับการเขียนโปรแกรมนะครับ ขอบคุณครับ 😀

thiti.dev © 2021 Thiti Yamsung