Setup Project Structure และ การ Implement Fiber ใน Go
Setup Project Structure (ยังไม่เสร็จ)
https://github.com/golang-standards/project-layout
Project Structure นั้นไม่ตายตัว แต่ Golang มี standard ของการจัด project layout เราสามารถนำมาใช้กับ project ของเราได้
YourProjectName
|__ assets
| |__ pics
| | |__ logo.png
| | |__ profileavatar.png
| |
| |__ data
|
|__ cmd
| |__ server
| |__ main.go
|
|__ config
|
|__ pkg
|__ foo.go
|__ foofoo.go
|__ bar
|__ bar.go
โดยทั่วไปแล้วตาม standard project layout เราจะมีโฟลเดอร์หลักๆคือ cmd และ pkg
cmd เก็บตัวโปรแกรมหลักของเราไว้ หรือเก็บ main.go ของเรา ซึ่งบางครั้ง main.go มีหน้าที่แค่เรียกใช้ code ส่วนอื่นมาใช้งานหรือทำหน้าที่เป็น entry point ของโปรแกรมเรานั้นเอง
ส่วน pkg คือโฟลเดอร์ที่เราเก็บการทำงานจริงๆของ function เราไว้เพื่อให้ไฟล์ใน cmd มาเรียกไปใช้อีกที
It's common to have a small
main
function that imports and invokes the code from the/internal
and/pkg
directories and nothing else.
การ Implement Fiber ใน Go (https://docs.gofiber.io/)
หลังจากเราทำการ setup project ของเราขึ้นมาแล้ว ให้เราทำการ download gofiber มาใช้
gofiber เป็น web framework ที่เอาไว้ใช้ทำ Web API
go get github.com/gofiber/fiber/v2
โดย gofiber นั้นได้รับแรงบันดาลใจมาจาก express.js สำหรับใครที่เคยใช้ express.js มาก่อนจึงสามารถเข้าใจ gofiber ได้อย่างง่ายดาย
ภายใน main.go
package main
import (
"github.com/gofiber/fiber/v2"
)
func main() {
}
Setup server
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(":8000")
}
เราเซ็ทให้ server ของเรารันที่ localhost:8000
หากเราลองไปที่ localhost:8000 หลังจากใช้คำสั่ง go run main.go แล้ว ก็จะพบกับข้อความ "Hello, world" ที่หน้าจอ browser ของเรา
หรือถ้าใช้ curl localhost:8000 ก็จะได้ข้อความ "Hello, world" ที่ terminal เช่นกัน
การทำ Routing
การทำ Routing คือการจัดการ response เมื่อผู้ใช้งานมาถึงที่ endpoint (URI หรือ Path) ของเราด้วย HTTP Method ต่างๆ (GET, PUT, POST, DELETE, etc.)
การทำ Routing ใน Go
app.Method(path string, ...func(*fiber.Ctx) error)
app คือ instance ของ fiber
Method คือ HTTP method: GET, PUT, POST, etc.
path คือ endpoint, URI ใน server ของเรา
func(*fiber.Ctx) error คือ callback function ที่เราจะใช้ดูแลการทำงานเมื่อผู้ใช้มาถึง endpoint ของเรา
อธิบายโค้ดตัวอย่าง
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Hello, world")
})
app.Get("/sayHi", func(c *fiber.Ctx) error {
return c.SendString("Hi!")
})
เมื่อผู้ใช้งานมาถึง endpoint "/" (ในที่นี่คือ "localhost:8000/") callback function ของเราก็จะทำงานโดยส่ง "Hello, world" ไปให้ผู้ใช้งาน
ส่วน endpoint "/sayHi" (ในที่นี้คือ "localhost:8000/sayHi") callback function ของเราก็จะทำงานโดยส่ง "Hi!" ไปให้ผู้ใช้งาน
Parameter ใน routing
บางครั้ง URI ของเรานั้นไม่ได้ตั้งไว้ตายตัว (มี Parameter ใน URI) เราสามารถดึงค่าที่เปลี่ยนแปลงไปตาม request ของผู้ใช้ได้โดยการใช้ c.Params
การสร้าง endpoint ที่มี parameter (ใส่ ":" ข้างหน้าชื่อ parameter)
app.Method("/:<ชื่อ parameter>", ...func(*fiber.Ctx) error)
ตัวอย่าง
// GET http://localhost:8000/hello%20world
app.Get("/:value", func(c *fiber.Ctx) error {
return c.SendString("value: " + c.Params("value"))
// => Get request with value: hello world
})
// GET http://localhost:8000/test
// value: test
// GET http://localhost:8000/golang%20tutorial%20for%20beginner
// value: golang tutorial for beginner
Optional Parameter
เราสามารถใส่ "?" หลัง parameter ของเรา เพื่อบอกว่าจะมีหรือไม่มี parameter ก็ได้
app.Method("/:value?", ...func(*fiber.Ctx) error)
Parameter แบบ Wildcard
สามารถใส่ "*" เพื่อบอกว่า URI ตรงนั้นเป็นอะไรก็ได้
// localhost:8000/user/<อะไรก็ได้>
app.Method("/user/*", ...func(*fiber.Ctx) error)
// localhost:8000/user/sorasora46
// localhost:8000/user/sora-k46
// localhost:8000/user/sora2k
// เมื่อผู้ใช้งานเรียกจาก URI ตัวอย่างด้านบน function ของเราที่เขียนไว้ซึ่งกำหนดให้ดูแล URI "/user/*" ก็จะทำงาน
การส่ง Static files จาก Server ใน Go
ส่ง HTML, CSS, Javascrip หรือรูปภาพ
app.Static(prefix, root string, config ...Static)
ตัวอย่าง
app := fiber.New()
app.Static("/", "./public")
// โหลด file จาก folder "public"
app.Listen(":8000")
public
|__ hello.html
|__ js
| |__ jquery.js
|
|__ css
|__ style.css
http://localhost:8000/hello.html
http://localhost:8000/js/jquery.js
http://localhost:8000/css/style.css
อ่านเพิ่มเติมได้ที่ Official website ของ Go fiber
คู่มือการสร้าง API ด้วยภาษา Go (https://docs.gofiber.io/api/fiber)