เนื่องจากอยากลองใช้งาน vgo
ทำหน้าที่จัดการ dependency หรือ library ต่าง ๆ
เห็นบอกว่าเป็น feature ที่จะเพิ่มเข้ามาใน Go 1.11
ดังนั้นจึงไปลองเล่น feature นี้กันหน่อยว่าเป็นอย่างไร
ว่าแล้วก็เริ่มกันเลย
ขั้นตอนที่ 1 ทำการติดตั้งก่อน
สิ่งที่ทำคือ ไป clone source code จาก repository ของ Go จากนั้นทำการ build จาก branch master ซึ่ง vgo นั้นได้ถูกเพิ่มเข้ามาให้แล้วดังนี้ [code] $git clone https://go.googlesource.com/go $cd go $cd src $./make.bash [/code] สวัสดี Go [code] $go version go version devel +5f5402b723 Tue Jul 24 23:54:08 2018 +0000 darwin/amd64 [/code]ขั้นตอนที่ 2 มาลองใช้งาน vgo กัน
Code ตัวอย่างเป็นการพัฒนา RESTful API ด้วย Gin [gist id="6f48a263f6e15ed7fffe59893560708f" file="main.go"] ทำการ run program ของเรา ลองไปลบ dependency ต่าง ๆ ของ Gin ออกจาก GOPATH ก่อนนะ เพื่อให้เห็นการทำงานของ vgo มา run กัน [code] $go run api.go go: cannot determine module path for source directory /my-code (outside GOPATH, no import comments) [/code] เกิด error ขึ้นมา มีคำว่า module ด้วยนะ นั่นคือ project อยู่นอก $GOPATH และ module ไม่เจอ ซึ่งเราจำเป็นต้องสร้างไฟล์ go.mod ขึ้นมาเพื่อกำหนด root ของ module ดังนี้ [gist id="6f48a263f6e15ed7fffe59893560708f" file="go.mod"] จากนั้นทำการ run อีกครั้ง ได้ผลดังนี้ [code] $go run api.go go: finding github.com/gin-gonic/gin v1.1.4 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/yaml.v2 v2.2.1 go: finding gopkg.in/go-playground/validator.v8 v8.18.2 go: downloading github.com/mattn/go-isatty v0.0.3 go: downloading github.com/manucorporat/sse v0.0.0-20160126180136-ee05b128a739 go: finding golang.org/x/net latest go: downloading golang.org/x/net v0.0.0-20180724234803-3673e40ba225 go: downloading gopkg.in/yaml.v2 v2.2.1 go: downloading gopkg.in/go-playground/validator.v8 v8.18.2 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] ไฟล์ go.mod นั่นคือ Go Module นะ เพื่อกำหนดให้เป็น module หลัก และจะทำการเก็บ dependency ต่าง ๆ ที่ใช้ หลังจากที่ run แล้วจะการตรวจสอบ, download และเก็บ depenedncy ที่ใช้งานไว้ดังนี้ [gist id="6f48a263f6e15ed7fffe59893560708f" file="go.mod-2"] รวมทั้งยังสร้างไฟล์ go.sum เพื่อเก็บค่า checksum ของ dependency แต่ละตัวอีกด้วย [gist id="6f48a263f6e15ed7fffe59893560708f" file="go.sum"]ส่วน dependency นั้นจะถูก download ไว้ใน $GOPATH/mod นะ เปลี่ยนไปแล้ววเพียงเท่านี้ก็ใช้งานได้แล้วนะ ไปลองกัน ขอให้สนุกกับการ coding ครับ