เริ่มต้น web application ด้วย golang
แนะนำภาษา golang
ยินดีต้อนรับสู่โลกของการพัฒนาด้วย ภาษา golang เนื่องเป็นภาษาใหม่ที่พัฒนาโดย google เพื่อใช้งานสำหรับรองรับการทำงานภายในขนาดใหญ่ ที่ต้องการความรวดเร็ว และเปิดให้เป็น open source สามารถใช้งาน golang เพื่อพัฒนาเป็น application ได้หลากหลาย
golang เป็น compiled language คล้ายกับภาษา C ทำให้มีความรวดเร็วในการทำงานมีจุดเด่นดังนี้
- go มีคุณสมบัติ fast-compiled, garbage-collected, concurrent system
วิธีการติดตั้ง golang
ติดตั้งจาก web ของ golang โดยตรง
ให้เปิด เวป https://golang.org/dl/ และทำการ download package ตรงตาม os ที่ใช้งาน ในที่นี้ใช้ mac ก็ให้ download ไฟล์ go1.5.2.darwin-amd64.pkg และให้ทำการติดตั้ง ปรกติ
$ go version
go version go1.5.2 darwin/amd64
ติดตั้งด้วย GVM
GVM 1 คือเครื่อมือที่ใช้สำหรับการติดตั้ง ทำให้สามารถติดตั้ง go ได้หลาย version การทำงานคล้ายๆกับ rvm ในruby
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
Cloning from https://github.com/moovweb/gvm.git to /Users/newton/.gvm
Created profile for existing install of Go at "/usr/local/Cellar/go/1.5.2/libexec"
Installed GVM v1.0.22
Please restart your terminal session or to get started right away run
`source /Users/newton/.gvm/scripts/gvm`
จะมีการเขียน script ไว้ใน ~/.bash_profile
[[ -s "/Users/newton/.gvm/scripts/gvm" ]] && source "/Users/newton/.gvm/scripts/gvm"
หลังจากการติดตั้งจะมีคำสั่ง gvm ให้ใช้งานดังนี้ gvm listall เพื่อเรียกดู tag version ที่ต้องการ
$ gvm listall
...
go1.5
go1.5.1
go1.5.2
go1.5beta1
go1.5beta2
go1.5beta3
go1.5rc1
go1.6beta1
...
หากต้องการติดตั้งก็สามารถใช้คำสั่ง gvm install [tag] และ หากต้องการใช้งาน go1.5 จะต้องติดตั้ง go1.4 ก่อน ดังนี้
gvm install go1.4
gvm use go1.4
gvm install go1.5
gvm use go1.5
จะได้ผลลัพท์ดังนี้
$ gvm install go1.4
Downloading Go source...
Installing go1.4...
* Compiling...
go1.4 successfully installed!
$ gvm use go1.4
Now using version go1.4
$ gvm install go1.5
Installing go1.5...
* Compiling...
go1.5 successfully installed!
newton@ ~$ gvm use go1.5
Now using version go1.5
ทดสอบ version จะเห็นว่า ตำแหน่งของคำสั่ง go จะอยู่ที่ $HOME/.gvm
@ ~$ which go
/Users/newton/.gvm/gos/go1.5/bin/go
1. อ้างอิง gvm https://github.com/moovweb/gvm ↩
ติดตั้งจาก package management ของ OS
สำหรับ mac
brew install go
สำหรับ ubuntu
sudo add-apt-repository ppa:gophers/go
sudo apt-get update
sudo apt-get install golang-stable
ทดสอบการใช้งาน
หลังจากที่ได้ติดตั้งเรียบร้อยแล้ว ต่อไปจะเป็นกำหนด workspace สำหรับการ build program โดยให้ทำการสร้าง directory เพื่อทำงาน ในที่จะตั้งชื่อว่า work ($HOME/gowork) และให้ทำการเพ่ิมค่าตัวแปรของ shell environment ชื่อ GOPATH ใน ~/.bash_profile ไว้ล่างสุด
$ mkdir ~/gowork
vi ~/.bash_profile
export GOPATH=$HOME/gowork
export GOBIN=$HOME/gowork/bin
source ~/.bash_profile
สร้าง folder src, bin, pkg ภายใต้ folder gowork
mkdir ~/gowork/{src,bin,pkg}
ตัวอย่าง1 สร้าง file ชื่อ hello.go ใน ~/gowork/src/hello.go
package main
import "fmt"
func main() {
fmt.Printf("Hello, world.\n")
}
ให้ใช้คำสั่ง go install
$ go install src/hello.go
$ tree .
.
├── bin
│ └── hello
├── pkg
└── src
└── hello.go
run program ที่อยู่ภายใน bin เพื่อดูลัพท์
$ ./bin/hello
Hello, world.
ตัวอย่าง2 Package Directory
- สร้าง package source file และ folder ดังนี้ $GOPATH/src/mymath/sqrt.go หมายความว่าชื่อ
mymath
จะทำหน้าที่เป็นชื่อ package name เหมือนกับชื่อของ folder ที่เก็บ source file ทุกครั้งที่มีสร้าง package ให้ทำการสร้าง folder ใหม่ทุกครั้งใน foldersrc
เราสามารถสร้างชั้นย่อยๆได้ (multi-level) เช่นถ้าหากเราสร้าง foldergithub.com/user/abcpackage
จะได้ว่าชื่อ packagename จะเป็นชื่อที่อยู่ใน folder ชั้นในสุด นั้นคือabcpackage
จากตัวอย่าง
//source code of $GOPATH/src/mymath/sqrt.go
package mymath
func Sqrt(x float64) float64 {
z := 0.0
for i := 0; i < 1000; i++ {
z -= (z*z - x) / (2*x)
}
return z
}
เนื่องจากเราต้องการสร้าง package เพื่อที่จะสามารถถูกเรียกใช้ได้จากโปรแกรม main ที่อยู่ในfile อื่น ทำให้เราต้องขึ้นต้นบรรทัดด้วย package mymath
ไม่ใช่ package main
เหมือนตัวอย่างที่ผ่านมา
- การ compile package ให้เราทำการย้ายไปยัง directory ของ package แล้ว ใช้คำสั่ง
go install
การสั่งคำสั่งนี้ ไม่ต้องตามด้วยชื่อของ package เช่นgo install mymath
cd $GOPATH/src/mymath/
go install
gowork$ tree .
.
├── bin
├── pkg
│ └── darwin_amd64
│ └── mymath.a
└── src
└── mymath
└── sqrt.go
5 directories, 2 files
หลังจากการสั่ง compile เรียบร้อย จะได้ผลเก็บไว้ใน folder pkg/darwin_amd64/mymath.a
(darwin คือ os ที่ทำงานอยู่ และ amd64 คือบอกว่าเป็นเครื่อง 64bit)
- ต่อมาเป็นการสร้าง application ชื่อ
mathapp
เพื่อเรียกใช้งาน package โดยให้สร้าง folder ของ application ชื่อ mathapp ภายใน src และสร้าง file ชื่อ main.go ดังนี้
cd $GOPATH/src
mkdir mathapp
cd mathapp
vim main.go
มี code ดังนี้
//$GOPATH/src/mathapp/main.go source code
package main
import (
"mymath"
"fmt"
)
func main() {
fmt.Printf("Hello, world Sqrt(2) = %v \n", mymath.Sqrt(2))
}
- ย้ายไปยัง app directory และสั่ง go install
cd $GOPATH/src/mymath
go install
cd $GOPATH
$ tree .
.
├── bin
│ └── mathapp
├── pkg
│ └── darwin_amd64
│ └── mymath.a
└── src
├── mathapp
│ └── main.go
└── mymath
└── sqrt.go
run app จะได้ผลดังนี้
gowork$ ./bin/mathapp
Hello, world Sqrt(2) = 1.414213562373095