Hello World
เกี่ยวกับบทเรียน
ภาษา Go เป็นภาษาที่มีมาพร้อมกับสิ่งอำนวยความสะดวกที่จำเป็นสำหรับการใช้งาน และมีเว็บเซิร์ฟเวอร์ในตัวพร้อมสำหรับการใช้งาน แพ็กเกจ net/http ซึ่งมีอยู่ในสแตนดาร์ดไลบรารีมีฟังก์ชันการทำงานที่เพียบพร้อมสำหรับ HTTP โพรโทคอล และอื่นๆอีกมากมาย ทั้งในส่วนของ HTTP client  และ HTTP server
ตัวอย่างที่เรามีให้จะทำให้คุณเห็นภาพว่ามันง่ายขนาดไหน ที่เราจะทำการสร้างเว็บเซิร์ฟเวอร์ที่จะทำให้คุณสามารถที่จะเปิดดูได้จากเบราว์เซอร์ของคุณ
การจัดการ Request
ขั้นแรก เราจะทำการสร้าง Handler ซึ่งทำหน้าที่รับข้อมูล HTTP ที่ถูกส่งเข้ามาทั้งหมดจากเบราว์เซอร์ ไม่ว่าจะมาจาก HTTP client หรือ API
Handler ในภาษา Go เราสามารถเขียนเป็นฟังก์ชันได้ตามตัวอย่างทางด้านล่าง
func (w http.ResponseWriter, r *http.Request)- http.ResponseWriterซึ่งเป็นส่วนที่เราจะใช้เพื่อเขียนข้อมูล text/html ก่อนที่จะค่าส่งกลับไป
- http.Requestเป็นส่วนเก็บข้อมูลจาก HTTP request ทั้งหมดเมื่อมีการเรียกเข้ามาซึ่งจะประกอบไปด้วย ข้อมูล URL และข้อมูล header ทั้งหมด
การสร้าง Request Handler จากฝั่ง Server ก็สามารถสร้างได้ง่ายๆ ดังนี้:
http.HandleFunc("/", func (w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello, you've requested: %s\n", r.URL.Path)
})การเชื่อมต่อ HTTP
ตัว Request Handler โดดๆ ไม่สามารถที่จะรับค่าจาก HTTP ได้เพราะ HTTP server ต้องรอรับข้อมูลจากพอร์ตสำหรับการเชื่อมต่อและรอรับข้อมูลเมื่อมีรีเควสต์เข้ามา พอร์ต 80 เป็นพอร์ตยอดนิยมและมักจะเป็นค่าเริ่มต้นสำหรับการรับส่งข้อมูล HTTP ดังนั้นเซิร์ฟเวอร์ที่พวกเราจะทำการสร้างก็จะรับข้อมูลโดยพอร์ตนี้ด้วยเช่นเดียวกัน
โค้ดต่อไปนี้มีหน้าที่สั่งให้เริ่มต้นใช้งาน HTTP server และรอรับข้อมูลจากเชื่อมต่อผ่านพอร์ต 80 คุณสามารถเปิดเบราว์เซอร์และเชื่อมต่อด้วยการพิมพ์ที่อยู่ http://localhost/ เพื่อดูว่าเซิร์ฟเวอร์ที่เราเพิ่งสร้างจะแสดงผลอย่างไร
http.ListenAndServe(":80", nil)โค้ด (สำหรับทดสอบ copy/paste)
นี่เป็นตัวโค้ดที่เสร็จสมบูรณ์ ซึ่งคุณสามารถนำไปใช้ทดสอบได้ เป็นโค้ดที่คุณได้เรียนรู้มาทั้งหมดในบทเรียนบทนี้
package main
import (
	"fmt"
	"net/http"
)
func main() {
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintf(w, "Hello, you've requested: %s\n", r.URL.Path)
	})
	http.ListenAndServe(":80", nil)
}
