Gofiber คือ web framework ภาษา Golang มีจุดขายว่าออกแบบ API มาให้คล้ายกับการใช้งาน Express ของฝั่ง Node.js
ซึ่งจะช่วยให้นักพัฒนาที่เคยใช้ Express สามารถมาใช้ Golang ที่มี performance สูงได้อย่างคุ้นเคยลดเวลาเรียนรู้ลง
เบื้องหลังของ go fiber ไม่ได้ใช้ standard net/http
ของ golang แต่เลือกใช้ fasthttp
ซึ่งเคลมตัวเองว่าเป็น http engine ที่เร็วที่สุดของ Golang(ในเวลาที่เขียนนี้)
go mod init github.con/napat/gofiber
go run ./cmd/fiberserver/
$ TOKEN=$(curl -s --data "user=john&pass=doe" http://localhost:3000/login | grep token | cut -d\" -f4); echo $TOKEN
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6dHJ1ZSwiZXhwIjoxNjE4ODU5OTUwLCJuYW1lIjoiSm9obiBEb2UifQ.NgdvIFlLCYjBdXXRa8dFi4BomizjvA3-npqrlr5B1RJRZgQHb7CG24FudTpmcm8QlHzTosRQLdHBre_mi1ak5zn2EtnYDAxzOcU_EeOJpO7-7041PJSRf2vEiV-Mq6x5mKv_aKYjS7no9rPcwjWrUquMaZCaenEnciWzESjf53lexHCstPrZwB4EQG2OcfznuyxBjU8aNm1N2BkS_hyTcpQ-4qsKbirl-DQWO_2nVChnuEZBXQ41nBnkW223jGSa4qAX6G_rZlEHbRkuq4ddHFvPsd9jQY6wqLI0Dw6KwCo3LBfH73opVjGfz3NvsBcPpeI9AcVz2uMQjPfAt2gbXw
$ curl -v localhost:3000/private -H "Authorization: Bearer $TOKEN"
...
Welcome John Doe
Gofiber มี Internal middleware และ External middleware ที่พัฒนาโดย fiber team ให้ใช้งานอยู่จำนวนหนึ่งทำให้สามารถเริ่มใช้งานฟีเจอร์หลักๆได้อย่างรวดเร็ว
นอกจากนี้ยังมี Third Party Middlewares สำหรับทำงานร่วมกับโปรแกรมอื่นๆเช่น swagger, prometheus, tracing ด้วยเช่นกัน
Guideline ของ gofiber แนะนำให้ไปใช้ validator link สำหรับการตรวจสอบข้อมูล struct ซึ่งจริงๆก็ไม่ได้ทำงานผูกกับตัว gofiber เลย
หลักการทำงานคือ หลักจากรับ request เข้ามาที่ fiberHttpHandler แล้วก็เรียก c.BodyParser() เพื่อ parse ข้อมูลใส่ struct
แล้วจึงโยนเข้าไปใน function ที่เราเขียนขึ้นเพื่อ ValidateStruct ภายในก็เรียกใช้งาน package validator (validate.Struct()) เพื่อตรวจสอบ
แล้วจึงตอบว่ามี error หรือไม่กลับออกมายัง fiberHttpHandler
Unit test
gofiber มี functions สำหรับช่วยทำ unit test ให้ใช้งานแล้วเช่น app.Test(req)
ดูตัวอย่างได้ที่
go test -cover ./...
? github.con/napat/gofiber/cmd/fiberserver [no test files]
? github.con/napat/gofiber/cmd/fiberserver_onefile [no test files]
ok github.con/napat/gofiber/internal/fiberserver 0.581s coverage: 50.8% of statements
$ go test -p 2 ./internal/fiberserver/
ok github.con/napat/gofiber/internal/fiberserver 0.674s
$ go test github.con/napat/gofiber/internal/fiberserver/
ok github.con/napat/gofiber/internal/fiberserver (cached)
$ go test -run TestPrivateHandler github.con/napat/gofiber/internal/fiberserver/
ok github.con/napat/gofiber/internal/fiberserver 0.240s
Example load test
go run ./cmd/fiberserver/
$ wrk -t4 -c400 -d10s http://localhost:3000/Running 10s test @ http://localhost:3000/
4 threads and 400 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 243.60ms 191.25ms 1.15s 85.13%
Req/Sec 572.62 331.63 1.03k 50.70%
17816 requests in 10.06s, 2.21MB read
Socket errors: connect 0, read 14, write 0, timeout 0
Requests/sec: 1770.56
Transfer/sec: 224.78KB
- gofiber: route & group
- gofiber template
- Internal middleware
- Internal middleware: Logger
- Internal middleware: Cache
- External middleware: JWT
- Validation
- validator package
- Graceful shutdown
- Golang TDD: Learn Go with Tests
- Golang Test mock httt fail example
- fiber Test
- fiber Test
- fiber Test
- fiber Test
- project layout
- giber example: CRUD