Fiber เป็น Go web framework ที่บอกว่าได้แนวคิดแบบเดียวกันกับ Express framework ของทางฝั่ง Node.js และ ใช้ Fasthttp ซึ่งเป็น library จัดการ HTTP server ที่ไม่ใช่ standard net/http
โดยเคลมว่าเป็น HTTP engine ที่เร็วที่สุดสำหรับ Go
เดี๋ยวจะลองเล่นดูสักเล็กน้อยแล้วทำความเข้าใจสไตล์การเขียนของมันดู
เริ่มจากสร้าง module ใหม่สำหรับ program เราก่อนเลย
$ mkdir try-go-fiber && cd try-go-fiber
$ go mod init "try-go-fiber"
ลองง่ายๆสมมติเป็น list posts API สำหรับ list ข้อมูลของ blog post ออกมา เราสามารถสร้าง router เพื่อ map path กับใส่ handler function เพื่อเขียนโค้ดให้ส่ง response กลับออกไปได้แบบนี้
package main
import "github.com/gofiber/fiber/v2"
type PostID int
type Post struct {
ID PostID `json:"id"`
Title string `json:"title"`
Body string `json:"body"`
}
var posts = map[PostID]Post{
1: {
ID: 1,
Title: "ลองเล่น Fiber",
Body: "Fiber ใช่ง่ายๆเลยสำหรับคนเคยเล่น Express มา",
},
2: {
ID: 2,
Title: "สิ่งที่อยากทำในปี 2021",
Body: "อยากลดน้ำหนักให้น้อยกว่านี้",
},
}
func main() {
app := fiber.New()
app.Get("/posts", func(c *fiber.Ctx) error {
var result []Post
for _, post := range posts {
result = append(result, post)
}
return c.JSON(result)
})
app.Listen(":3000")
}
จะเห็นว่าวิธีใช้ก็คือเรียก function fiber.New()
เพื่อสร้าง app ที่เป็นค่าที่เก็บ context ต่างๆของ application เรา
และเราจะเอามันไปเรียก method ในการกำหนด route ต่างๆเพื่อ map กับ handler จากตัวอย่างเราเรียก app.Get("/posts", ...handler_function...)
คือกำหนดถ้าเรียกมาด้วย HTTP GET ที่ path /posts
จะทำงานตาม handler function ที่เรากำหนด
ในตัวอย่าง handler function เราเขียนเป็น anonymous function โดยฟังก์ชันต้องรับค่า c *fiber.Ctx
กับ return error
ตัว *fiber.Ctx
คือค่าที่ Fiber จะส่งมาให้ handler เป็นค่าที่เราใช้ทั้งถึงข้อมูลที่มากับ request และส่งข้อมูล response กับไป
จากตัวอย่างผมเอาข้อมูลของ posts ตอบกลับไปเป็น JSON format ด้วย method c.JSON
นั่นเอง
สุดท้ายเราต้องเรียก app.Listen(":3000")
เพื่อให้ fiber เปิด HTTP server รอรับ request ที่ port 3000 นั่นเอง
ลองเรียก API endpoint นี้ของเราด้วย curl (แล้ว format ด้วย jq) จะเห็นผลลัพธ์แบบนี้
$ curl -s http://127.0.0.1:3000/posts | jq
[
{
"id": 1,
"title": "ลองเล่น Fiber",
"body": "Fiber ใช่ง่ายๆเลยสำหรับคนเคยเล่น Express มา"
},
{
"id": 2,
"title": "สิ่งที่อยากทำในปี 2021",
"body": "อยากลดน้ำหนักให้น้อยกว่านี้"
}
]
ซึ่งถ้าเราดูจากสไตล์การเขียน ก็ไม่ยากเท่าไหร่ ถ้าใครเคยใช้ Gin หรือ Echo framework มาก่อนก็แบบไม่ต่างกันเท่าไหร่เลย ที่เหลือก็คงเป็นเรื่องความเร็วที่เคลมว่าเร็วกว่าใครอยากลองเอาไปวัดดูจริงๆกับระบบตัวเองก็ลองย้ายมาเขียนแล้วเทียบกันดูได้เลย
Top comments (0)