Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

มาลอง Go Module ใน Go 1.11 beta

$
0
0

หลังจากที่ Go 1.11 beta 2 ถูกปล่อยออกมาให้ลองใช้งานกัน ซึ่งตัวเต็ม ๆ จะปล่อยมาในเดือนสิงหาคมนี้ feature ที่น่าสนใจคือ Go Module
จาก go get -> vendor -> vgo -> go mod ใน Go 1.11
ดูเอกสารเพิ่มเติมได้ที่ Release Note

มาเริ่มต้นใช้งานกันหน่อย

[code] $cd $GOPATH/src/module_name $go mod -init go: modules disabled inside GOPATH/src by GO111MODULE=auto; see 'go help modules' [/code] ทำการเปิด Go module feature ด้วยคำสั่ง [code] $export GO111MODULE=on [/code] ทำการสร้างไฟล์ go.mod สำหรับอธิบาย module [code] $go mod -init go: creating new go.mod: module main [/code] จากนั้นก็ทำการแก้ไขไฟล์ go.mod เพื่อระบุ dependency ที่ใช้งานดังนี้ [gist id="d222f569f58259b7f1e76f7bbbfc0d48" file="go.mod"] ทำการ build ระบบ จะทำการ download dependency ที่กำหนดไว้ใน go.mod ดังนี้ [code] $go build go: downloading github.com/gin-gonic/gin v1.1.4 go: finding github.com/manucorporat/sse latest go: finding github.com/mattn/go-isatty v0.0.3 go: finding github.com/golang/protobuf/proto latest go: finding golang.org/x/net/context latest go: finding gopkg.in/go-playground/validator.v8 v8.18.2 go: finding gopkg.in/yaml.v2 v2.2.1 go: finding golang.org/x/net latest go: downloading golang.org/x/net v0.0.0-20180724234803-3673e40ba225 go: downloading github.com/mattn/go-isatty v0.0.3 go: downloading github.com/manucorporat/sse v0.0.0-20160126180136-ee05b128a739 go: downloading gopkg.in/go-playground/validator.v8 v8.18.2 go: downloading gopkg.in/yaml.v2 v2.2.1 go: finding github.com/golang/protobuf v1.1.0 go: downloading github.com/golang/protobuf v1.1.0 go: finding gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 [/code]

สิ่งที่น่าสนใจคือ เรื่องของ version

การตั้งชื่อของ version ต้องเป็นไปตาม semantically versioned นั่นคือมีรูปแบบดังนี้ v(major).(minor).(patch) เสมอ ดังนั้นถ้า dependency ใด ไม่มี version ตามนี้จะไม่สามารถใช้งานได้ ยกตัวอย่างเช่น go-gin นั้น version ล่าสุดคือ v2.0 ดังนั้นจึงไม่สามารถกำหนดใน go.mod ได้ จะเกิด error ดังนี้ [code] go.mod:4: invalid module version "v2.0": no matching versions for query "v2.0" [/code] ถ้าต้องการ update depedency ใหม่ทั้งหมด ใช้คำสั่งดังนี้ [code] $go mod -sync go: downloading gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 go: finding github.com/stretchr/testify/assert latest go: finding golang.org/x/sync/errgroup latest go: finding gopkg.in/go-playground/assert.v1 v1.2.1 go: finding golang.org/x/sync latest go: downloading golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f go: finding golang.org/x/sys/unix latest go: downloading gopkg.in/go-playground/assert.v1 v1.2.1 go: finding golang.org/x/sys latest go: downloading golang.org/x/sys v0.0.0-20180724212812-e072cadbbdc8 go: finding github.com/stretchr/testify v1.2.2 go: downloading github.com/stretchr/testify v1.2.2 go: finding github.com/pmezard/go-difflib/difflib latest go: finding github.com/davecgh/go-spew/spew latest go: finding github.com/davecgh/go-spew v1.1.0 go: downloading github.com/davecgh/go-spew v1.1.0 go: finding github.com/pmezard/go-difflib v1.0.0 go: downloading github.com/pmezard/go-difflib v1.0.0 [/code] คำสั่งอื่น ๆ ของ go mod ประกอบไปด้วย [code] $go mod -sync $go mod -fmt #go fmt สำหรับไฟล์ go.mod และ go.sum $go mod -fix #จัดการไฟล์ go.mod $go mod -graph #สำหรับดู depedency ทั้งหมดที่ใช้งาน [/code] ยังไม่พอนะ ถ้ายังต้องทำการส่งมอบในรูปแบบ vendor นั่นคือสร้าง vendor folder ขึ้นมาในระบบ แน่นอนว่า Go Module ยังสนับสนุนด้วยคำสั่ง $go mod -vendor มาดูในไฟล์ go.mod กันดูบ้าง [gist id="d222f569f58259b7f1e76f7bbbfc0d48" file="go.mod-2"] โดยที่ require นั้นจะมี comment indirect มาให้ เป็นการบอกว่าคือ depedency ที่เราไม่ได้กำหนด แต่ว่าต้องใช้งานจาก depedency ที่เรากำหนดนั่นเอง แต่ไม่ใช่มีแค่ require นะ ยังมี exclude และ replace อีกด้วย อยากรู้มากขึ้นไปดูที่ [code] $go help modules [/code] เพียงเท่านี้น่าจะพอทำให้เข้าใจมากขึ้นสำหรับ Go Module มากขึ้น ว่าแล้วไปสร้าง Module และใช้งานกัน

Viewing all articles
Browse latest Browse all 1997

Trending Articles