ทำเว็บแอพพลิเคชั่น Hello, World


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 ในโปรเจ็กต์ และเราจะใช้คำสั่งนี้ในการทดสอบ

Leave a Reply

Your email address will not be published. Required fields are marked *