มาลอง Build GO Lang ขึ้น Production กันเถอะ

Phatcharaphan Ananpreechakun
3 min readJun 4, 2017

--

หลายครั้งก็สงสัย

ว่าบน Production ต้องลงอะไรไหม ? ไม่ต้องเลยสักนิด ตัว binary ของ Golang เนี่ยฉลาดๆจริงๆ สามารถอยู่ตัวคนเดียวได้

ต้อง build ยังไง ? เดี๋ยวเรามาดูกัน

ต้อง run ยังไง ? เดี๋ยวเรามาดูกัน

เพราะว่าส่วนใหญ่ก็เขียนบนเครื่องตัวเองแล้วก็ run บนเครื่องตัวเองนี่แหละ ไม่เคย build เป็น binary ขึ้น production สักที ก็เลยมาลองสักหน่อยจะได้รู้สักที

เมื่อเราเขียน Golang เสร็จแล้ว และตัวโปรแกรมของเราเนี่ยต้องต่อกับ Database ด้วย บน Production ของเราก็ต้องมา Database ที่เราจะติดต่อด้วยเนอะ

วันนี้เราจะมาลอง Insert ข้อมูลลง MongoDb กัน

package mainimport ("fmt""gopkg.in/mgo.v2""gopkg.in/mgo.v2/bson")func main(){   session, err := mgo.Dial("localhost:27017")   if err != nil {      panic(err)   }   defer session.Close()   collection := session.DB("income").C("users")   err = collection.Insert(bson.M{"name": "Phatcharaphan"})   if err != nil {      panic(err)   }   fmt.Println("Insert data success.")}

ลอง run command

go run main.go

แล้วแสดง Insert data success. แสดงว่าเพิ่มข้อมูลใน Mongo ได้แล้ว อันนี้เราลองทดสอบบนเครื่องของเราก่อนเนอะว่าได้ผลลัพธ์ตามที่เราต้องการหรือเปล่า แล้วค่อย Build เป็น binary ขึ้น Production กัน

เรามาดูข้อมูลใน Mongo กัน จะเห็นฐานข้อมูลดังภาพ

เรามาดูข้อมูลใน income กัน ข้อมูลจะแสดงดังภาพ

คราวนี้เรามา build กันดีกว่า ขึ้น Production กัน

Run command

go build main.go

เราจะได้ Binary ตัวนึง ชื่อ main ดังภาพ

คราวนี้เรานำตัว Binary ตัวนี้ขึ้น Production กัน

ตอนนี้เรานำ Binary ขึ้น Production บน path ดังภาพ /root/tmp

ต่อมาเรามา Run โปรแกรมกัน ด้วยคำสั่ง

./main

อะแน่ๆๆๆ แต่ว่าเกิด Error ดังภาพ เพราะว่าไฟล์ที่เรา Build มาต้นทางเป็นเครื่อง Macbook เครื่องที่เรานำมา Run ก็ต้องเป็นเครื่อง Macbook ด้วยจะสามารถ Run ได้ อย่างนั้นเวลาที่เราจะ Build Binary เราต้องตรวจสอบก่อนว่าเครื่องที่เราจะนำไป Run นั้นเป็นเครื่องอะไร แล้วค่อย set ก่อนที่จะ Build Golang

อย่างนั้นเรามาดูว่าเครื่องที่เราจะนำ Golang ไป Run นั้นเป็น os อะไร Run command ใน os ของเราด้วยคำสั่ง

uname -a

เมื่อเรา Run คำสั่งนี้แล้วผลลัพธ์จะได้ดังภาพ เครื่องที่เราจะ Execute binary นั้นเป็น Linux

เรามา Build binary ใหม่กันแต่เราต้อง Set ให้เป็น Linux ก่อนด้วยคำสั่ง

export GOOS=linux
export GOARCH=amd64

เมื่อเราปิดหน้าจอที่เรา export ไว้ตัวที่เรา Set ไว้ก็กลับไปเป็น kernel เดิมของเครื่องเราน่ะจ๊ะ เช่นของเก๋ตอนนี้เป็น GOOS=”darwin” ซึ่ง kernel เป็น Mac

อะๆๆมาต่อกันเมื่อเรา Set Execute binary ปลายทางแล้วเราก็มา build Golang ด้วยคำสั่ง

go build main.go

เสร็จแล้วเราก็จะได้ Binary main แล้วเราก็นำ Binary ตัวนี้ขึ้น Production

แล้วเราก็มาลอง Run คำสั่งใหม่อีกรอบน่ะจ๊ะ เย้ๆครั้งนี้ Run ได้ด้วยดังภาพ

หลังจากนั้นเราก็มาดูว่าผลลัพธ์ว่าข้อมูลลง Mongo บน Production หรือเปล่าน๊าามาดูกันดังภาพ

เย้ๆๆ เรา Run binay golang บน Production ข้อมูลลงฐานข้อมูลแล้วว

ผิดพลาดตรงไหน ช่วยแก้ไขด้วยน่ะจ๊ะ

ขอให้สนุกกับการเขียน Golang น่ะจ๊ะ อันนี้เป็นวิธีแบบลำบากนิดนึง ซึ่งเราต้องทำเองหมดทุกอย่างเลย ถ้าเราใช้ Jenkins ในการ build ให้ ชิวิตเราก็จะโคตรสะดวกเลย คราวหน้าเรามาดู blog กัน set jenkins ให้ build binary Golang บน Production กันน่ะจ๊ะ

--

--

Phatcharaphan Ananpreechakun
Phatcharaphan Ananpreechakun

Written by Phatcharaphan Ananpreechakun

I’m a Full Stack Developer passionate about building user-friendly applications and solving problems with code. ^-^

Responses (2)