เว็บเฟรมเวิร์ค Go Fiber
เว็บเฟรมเวิร์ค ที่ได้รับแรงบันดาลใจจาก Express ที่เขียนใน Go Fiber เป็นเฟรมเวิร์ค์เว็บ Go ที่สร้างขึ้นบน Fasthttp ซึ่งเป็นเอ็นจิ้น HTTP ที่เร็วที่สุดสำหรับ Go ได้รับการออกแบบมาเพื่อให้ง่ายต่อการพัฒนาอย่างรวดเร็วโดยคำนึงถึงการจัดสรรหน่วยความจำและประสิทธิภาพ
ข้อกำหนดเบื้องต้น
ข้อกำหนดเพียงอย่างเดียวสำหรับบทความนี้คือ คุณต้องติดตั้ง Go บนคอมพิวเตอร์ของคุณและเคยทำตามบทความ Workshop-2 New Deck & Print มาก่อน
สร้าง Workspace สำหรับ Go Fiber
สร้างโฟลเดอร์โมดูล ชื่อ gofiber -> Open integrated Terminal
สร้างไฟล์ go.mod
ใช้คำสั่ง
go mod init gofiber
สร้างไฟล์ main.go
นำเข้า gofiber
ที่โฟลเดอร์โมดูล gofiber ใช้คำสั่ง
go get github.com/gofiber/fiber/v2
gofiber จะติดตั้งไปที่ pkg->github.com->gofiber
ที่ไฟล์ go.mod
ไฟล์ go.sum ที่เพิ่มเข้ามา
Hello, World! กับ Go Fiber
package main
import "github.com/gofiber/fiber/v2"
func main() {
app := fiber.New()
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Hello, World!")
})
app.Listen(":3000")
}
ภายในฟังก์ชัน main คุณจะเห็นโค้ดต่อไปนี้:
เริ่มต้นอินสแตนซ์ใหม่ของแอป Fiber
app := fiber.new()
นี่คือโค้ดเส้นทางของคุณ เป็นการกำหนดเส้นทาง (routing) เมื่อต้องการใช้คำขอ GET ให้ใช้ .Get() และ เมื่อคุณต้องการใช้คำขอ POST คุณเพียงแค่ใช้ .Post() หลังจากนั้น คุณจะเห็นฟังก์ชันเรียกกลับที่มีพารามิเตอร์การตอบสนองที่กำหนดเป็น c และการจัดการข้อผิดพลาด
app.Get("/", func(c *fiber.Ctx) error {
ในบรรทัดนี้ return จะถูกส่งกลับ เป็นสตริงธรรมดาที่ส่งคืนพร้อมกับ Hello World
return c.SendString("Hello, World!")
ในบรรทัดล่างเราเห็นพอร์ต Listen เป็น 3000 :
app.Listen(":3000")
ดังนั้นเมื่อคุณเรียกใช้เซิร์ฟเวอร์นี้ด้วย go run main.go มันจะเริ่มต้นเว็บเซิร์ฟเวอร์บนพอร์ต 3000 ของ localhost ของคุณ
หากคุณไปที่เว็บบราวเซอร์ ป้อน URL http://localhost:3000/ คุณจะเห็นว่า Hello, World! อยู่บนหน้าจอของคุณ
Basic routing (การกำหนดเส้นทางพื้นฐาน)
การกำหนดเส้นทางหมายถึงการกำหนดวิธีที่แอปพลิเคชันตอบสนองต่อคำขอของไคลเอ็นต์ไปยังปลายทางเฉพาะ ซึ่งเป็น URI (หรือเส้นทาง) และวิธีการขอ HTTP เฉพาะ (GET, PUT, POST และอื่นๆ)
แต่ละเส้นทางสามารถมีฟังก์ชันตัวจัดการได้หลายแบบ ซึ่งจะดำเนินการเมื่อเส้นทางตรงกัน
การกำหนดเส้นทางใช้โครงสร้างต่อไปนี้:
// Function signature
app.Method(path string, ...func(*fiber.Ctx) error)
- แอพ (app) เป็นอินสแตนซ์ (instance) ของ Fiber
- เมธอด (Method) เป็นวิธีการขอ HTTP โดยใช้อักษรตัวพิมพ์ใหญ่: Get, Put, Post ฯลฯ
- เส้นทาง (path) คือเส้นทางเสมือน (virtual path) บนเซิร์ฟเวอร์
- ข้อผิดพลาด func(*fiber.Ctx) คือฟังก์ชันการเรียกกลับที่มีบริบทที่ดำเนินการเมื่อเส้นทางถูกจับคู่
ตัวอย่าง
package main
import "github.com/gofiber/fiber/v2"
func hello(c *fiber.Ctx) error {
return c.SendString("Welcome to Go Developers Thailand")
}
func main() {
app := fiber.New()
app.Get("/", hello)
app.Listen(":3000")
}
Simple route
// Respond with "Hello, World!" on root path, "/"
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Hello, World!")
})
Parameters
// GET http://localhost:8080/hello%20world
app.Get("/:value", func(c *fiber.Ctx) error {
return c.SendString("value: " + c.Params("value"))
// => Get request with value: hello world
})
Optional parameter
// GET http://localhost:3000/john
app.Get("/:name?", func(c *fiber.Ctx) error {
if c.Params("name") != "" {
return c.SendString("Hello " + c.Params("name"))
// => Hello john
}
return c.SendString("Where is john?")
})
Wildcards
// GET http://localhost:3000/api/user/john
app.Get("/api/*", func(c *fiber.Ctx) error {
return c.SendString("API path: " + c.Params("*"))
// => API path: user/john
})
Static files
ในการให้บริการไฟล์แบบคงที่ เช่น ไฟล์รูปภาพ, ไฟล์ CSS และ JavaScript ให้แทนที่ตัวจัดการฟังก์ชันของคุณด้วยไฟล์หรือไดเร็กทอรีสตริง
app.Static(prefix, root string)
ใช้โค้ดต่อไปนี้เพื่อให้บริการไฟล์ในไดเร็กทอรีชื่อ ./public:
app := fiber.New()
app.Static("/", "./public")
app.Listen(":3000")
ตอนนี้คุณสามารถโหลดไฟล์ที่อยู่ในไดเร็กทอรี ./public:
http://localhost:8080/hello.html
http://localhost:8080/js/jquery.js
http://localhost:8080/css/style.css
เทมเพลต (Templates)
Fiber รองรับเอ็นจิ้นเทมเพลตฝั่งเซิร์ฟเวอร์
Template interfaces
Fiber จัดเตรียมอินเทอร์เฟซ Views เพื่อจัดเตรียมเครื่องมือเทมเพลตของคุณ
type Views interface {
Load() error
Render(io.Writer, string, interface{}, ...string) error
}
อินเทอร์เฟซ Views ประกอบด้วยวิธีการโหลดและแสดงผล การโหลดจะดำเนินการโดย Fiber ในการเริ่มต้นแอปเพื่อโหลด/แยกวิเคราะห์เทมเพลต
// Pass engine to Fiber's Views Engine
app := fiber.New(fiber.Config{
Views: engine,
// Views Layout is the global layout for all template render until override on Render function.
ViewsLayout: "layouts/main"
})
วิธี Render เชื่อมโยงกับฟังก์ชัน ctx.Render() ที่ยอมรับชื่อเทมเพลตและข้อมูลการผูก จะใช้โครงร่างส่วนกลางหากไม่ได้กำหนดเลย์เอาต์ในฟังก์ชัน Render
app.Get("/", func(c *fiber.Ctx) error {
return c.Render("index", fiber.Map{
"hello": "world",
});
})
Engines
ตัวอย่าง template html
นำเข้า template/html ด้วยคำสั่ง
go get github.com/gofiber/template/html
สร้างโฟลเดอร์ views และ สร้างไฟล์ index.html เขียนโค้ดดังนี้
<!DOCTYPE html>
<body>
<h1>{{.Title}}</h1>
</body>
</html>
ที่ ไฟล์ main.go เขียนโค้ดดังนี้
package main
import (
"log"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/template/html"
)
func main() {
// Initialize standard Go html template engine
engine := html.New("./views", ".html")
app := fiber.New(fiber.Config{
Views: engine,
})
app.Get("/", func(c *fiber.Ctx) error {
// Render index template
return c.Render("index", fiber.Map{
"Title": "Hello, World!",
})
})
log.Fatal(app.Listen(":3000"))
}
ทดสอบการทำงาน
ทีม Fiber ดูแลแพ็คเกจเทมเพลตที่จัดเตรียม wrappers สำหรับเอ็นจิ้นเทมเพลตหลายตัว: ดังนี้