
Go นั้นเป็นเหมือนผลิตภัณฑ์หนึ่งของ Google ซึ่งเปิดให้ Programmer ทั้งหลายได้นำไปใช้ Coding และพัฒนาโปรแกรมกันแบบฟรีๆ งานที่ต้องการ การประมวลผลเยอะๆ อย่างเช่นการทำ web server ,api server ที่ต้องการความเร็วในการประมวลผลมากๆ และจำนวนเยอะๆ Web Application ภาษา Go เป็นภาษาที่มี Performance สูง สามารถทำงานได้อย่างรวดเร็ว ซึ่งย่อมต้องแลกกับความยุ่งยาก สำหรับการเรียนรู้ ถ้าคุณไม่ยอมแพ้กับความ ยุ่งยาก ลองทำตามขั้นตอนด้านล่าง…ครับ
ข้อกำหนดเบื้องต้น
ข้อกำหนดเพียงอย่างเดียวสำหรับบทความนี้คือ คุณต้องติดตั้ง Go บนคอมพิวเตอร์ของคุณตามบทความ ติดตั้ง Go และ ทดสอบ Hello World และ คุณคุ้นเคยกับรูปแบบและโครงสร้างของมัน ด้วยการผ่านการเรียนรู้บทความ Workshop-2 New Deck & Print มาก่อน
ทำเว็บแอพพลิเคชั่น “Hello, World”
สร้างโฟลเดอร์ใหม่สำหรับการเรียนรู้ การสร้างเว็บแอพพลิเคชั่นพื้นฐาน ชื่อ web ที่ GOPATH ในตัวอย่างคือ C:/User/ชื่อผู้ใช้/go/src

สร้างไฟล์ main.go โดยคลิกไปที่ไอคอน New File ตั้งชื่อเป็น main.go เขียนโค้ดโครงสร้างเริ่มต้น ภาษา Go ดังนี้
package main
func main() {
}

นำเข้า แพ็กเกจ ชื่อ “net/http”

โดย net สำหรับ จัดเตรียมอินเทอร์เฟซแบบพกพาสำหรับเครือข่าย I/O รวมถึง TCP/IP, UDP, การจำแนกชื่อโดเมน และซ็อกเก็ตโดเมน Unix และ http สำหรับ จัดเตรียมการใช้งานไคลเอ็นต์ HTTP และเซิร์ฟเวอร์
import "net/http"

เรียกใช้งานฟังก์ชัน ListenAndServe

http.ListenAndServe() วิธีการที่เริ่มต้นเซิร์ฟเวอร์บนพอร์ตที่กำหนดเช่น 3000 และคุณสามารถใช้พอร์ตอื่นได้หากมีการใช้งาน localhost:3000 บนเครื่องของคุณแล้ว ส่วน nil มาจาก ภาษาละติน คำว่า nihil, nihilum ซึ่งแปลว่า “nothing” หรือ “ว่างเปล่า, ไม่มีอะไร” แต่ในบางภาษาก็อาจจะใช้เป็น “null”
http.ListenAndServe(":3000", nil)

เรียกใช้งานฟังก์ชัน HandleFunc
HandleFunc คือ ใช้ในการเรียกใช้ฟังก์ชันตามคำร้องขอ ถ้าตรงกับ อาร์กิวเมนต์แรก ให้เรียกใช้ อาร์กิวเมนต์สอง ซึ่งจะเป็นฟังก์ชัน

1. ถ้าอาร์กิวเมนต์แรกคือ “/” ตัวอย่างเช่น http://localhost:3000/ ให้เรียกใช้งาน อาร์กิวเมนต์สอง คือ ฟังก์ชัน page1 (หน้า 1)
2. ถ้าอาร์กิวเมนต์แรกคือ “/about” ตัวอย่างเช่น URL http://localhost:3000/about ให้เรียกใช้งาน อาร์กิวเมนต์สอง คือ ฟังก์ชัน page2 (หน้า 2)

http.HandleFunc("/", page1)
http.HandleFunc("about", page2)

นำเข้า แพ็กเกจ ชื่อ “io”
Package io จัดเตรียมอินเทอร์เฟซพื้นฐานให้กับ I/O primitives
import "io"

สร้างฟังก์ชัน รองรับคำร้องขอ page1 และ page2 ถ้าคำร้องขอตรงกับ *http.Request ฟังก์ชันไหน ให้ ResponseWriter แสดงข้อความตามฟังก์ชันนั้น ด้วยคำสั่ง io.WriteString
page1 := func(w http.ResponseWriter, req *http.Request) {
io.WriteString(w, "<h1>Hello, world!</h1>")
}
page2 := func(w http.ResponseWriter, req *http.Request) {
io.WriteString(w, "<h1>I'm Go Programmer Language.</h1>")
}

ทดสอบการทำงาน
คลิกขวาที่ โฟลเดอร์ web -> Open integrated Terminal

ใช้คำสั่ง go run main.go

คลิก Allow access

หากคุณไปที่ http://localhost:3000 ในเบราว์เซอร์ คุณจะเห็นข้อความ “Hello World!” แสดงบนหน้าจอของคุณ

แต่ถ้าหากคุณไปที่ http://localhost:3000/about ในเบราว์เซอร์ คุณจะเห็นข้อความ “I’m Go Programmer Language.” แสดงบนหน้าจอของคุณ

สร้างไฟล์ go.mod
หยุดกระบวนการทำงานในเทอร์มินัลของคุณโดยใช้ ctrl-c
สร้างและเรียกใช้งานคำสั่ง เพื่อสร้างไฟล์ go.mod คือสิ่งที่สร้างขึ้นมาเพื่อจัดการ packages ต่างๆ สามารถกำหนดเวอร์ชั่นได้และมีการจัดการที่มีประสิทธิภาพมากขึ้นนั้นเอง
go mod init

ทดสอบที่ page1 ลองเปลี่ยนข้อความเป็น Hello, world! 2
page1 := func(w http.ResponseWriter, req *http.Request) {
io.WriteString(w, "<h1>Hello, world! 2</h1>")
}
เรียกใช้เว็บเซิร์ฟเวอร์อีกครั้งด้วย คำสั่ง go build สังเกต จะมีไฟล์ web.exe เพิ่มเข้ามา

ทดสอบการทำงานโดย ใช้คำสั่ง ./web

ทดสอบการทำงานโดยไปที่ http://localhost:3000 จากนั้นรีเฟรชเบราว์เซอร์ของคุณ จะเห็นข้อความเปลี่ยนเป็น Hello, world! 2

รีสตาร์ทเซิร์ฟเวอร์อัตโนมัติ ด้วย fresh
การสร้างและรีสตาร์ทเซิร์ฟเวอร์นั้นค่อนข้างน่าเบื่อทุกครั้งที่คุณทำการเปลี่ยนแปลงโค้ด โชคดีที่คุณสามารถหลีกเลี่ยงสิ่งนั้นได้ด้วยความช่วยเหลือของแพ็คเกจ Fresh เรียกใช้คำสั่งด้านล่างเพื่อติดตั้งแพ็คเกจในไดเร็กทอรี GOBIN ของคุณ:
go get github.com/pilu/fresh
คลิกขวาที่ โฟลเดอร์ bin -> Open integrated Terminal


คลิกขวาที่ โฟลเดอร์ web -> Open integrated Terminal

จากนั้นรันคำสั่ง fresh ที่รูทของไดเร็กทอรีโครงการของคุณ:
fresh

คลิก Allow access


ที่ page1 ทดสอบเปลี่ยนข้อความเป็น Hello, world! 3
page1 := func(w http.ResponseWriter, req *http.Request) {
io.WriteString(w, "<h1>Hello, world! 3</h1>")
}

ทดสอบการทำงานโดยไปที่ http://localhost:3000 จากนั้นรีเฟรชเบราว์เซอร์ของคุณ จะเห็นข้อความเปลี่ยนเป็น Hello, world! 3

จากนี้ไป fresh จะสร้างและเรียกใช้เว็บเซิร์ฟเวอร์ของคุณทุกครั้งที่คุณสร้าง แก้ไข หรือลบไฟล์ Go ในโปรเจ็กต์ และเราจะใช้คำสั่งนี้ในการทดสอบ