เว็บเฟรมเวิร์ค 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 ของคุณ

เว็บเฟรมเวิร์ค Go Fiber


หากคุณไปที่เว็บบราวเซอร์ ป้อน 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"))
}


ทดสอบการทำงาน

เว็บเฟรมเวิร์ค Go Fiber

ทีม Fiber ดูแลแพ็คเกจเทมเพลตที่จัดเตรียม wrappers สำหรับเอ็นจิ้นเทมเพลตหลายตัว: ดังนี้

Leave a Reply

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