การเริ่มต้นใช้งานกับเฟรมเวิร์คเว็บ Go Iris
การติดตั้ง
หมายเหตุ: ต้องการ Go เวอร์ชัน 1.20 หรือสูงกว่า.
$ mkdir myapp
$ cd myapp
$ go mod init myapp
$ go get github.com/kataras/iris/v12@latest
นำมาใช้ในโค้ดของคุณ:
import "github.com/kataras/iris/v12"
การแก้ปัญหาการติดตั้ง
หากคุณพบข้อผิดพลาดของเครือข่ายระหว่างการติดตั้ง ให้ตรวจสอบว่าตัวแปรสภาพแวดล้อม GOPROXY ถูกตั้งค่าเป็นค่าที่ถูกต้อง.
go env -w GOPROXY=https://goproxy.io,direct
หากวิธีข้างต้นไม่สามารถแก้ไขปัญหาได้ ลบแคชโมดูล go:
go clean --modcache
เริ่มต้นอย่างรวดเร็ว
โหมดการทำงาน
$ cat main.go
package main
import "github.com/kataras/iris/v12"
func main() {
// กำหนดอินสแทนซ์ของ iris
app := iris.New()
// กำหนดกลุ่มเส้นทาง, (ที่นี่กำหนดกลุ่มเส้นทางด้วยคำนำหน้า /books)
booksAPI := app.Party("/books")
{
// ใช้ middleware
booksAPI.Use(iris.Compression)
// กำหนดเส้นทางและตัวจัดการเส้นทาง
// GET: http://localhost:8080/books
booksAPI.Get("/", list)
// POST: http://localhost:8080/books
booksAPI.Post("/", create)
}
// ฟังก์ชันสำหรับรับการเชื่อมต่อ
app.Listen(":8080")
}
// ตัวอย่างหนังสือ
type Book struct {
Title string `json:"title"`
}
func list(ctx iris.Context) {
books := []Book{
{"Mastering Concurrency in Go"},
{"Go Design Patterns"},
{"Black Hat Go"},
}
ctx.JSON(books)
// หมายเหตุ: การซึ่งค่าตอบรับจากการเจรจาตามลำดับลำดับความสำคัญของเซิฟเวอร์และลูกค้า
// แทนที่ใช้ ctx.JSON:
// ctx.Negotiation().JSON().MsgPack().Protobuf()
// ctx.Negotiate(books)
}
func create(ctx iris.Context) {
var b Book
err := ctx.ReadJSON(&b)
// หมายเหตุ: ใช้ ctx.ReadBody(&b) เพื่อผูกข้อมูลเข้าที่มาตั้งmหรืออกหรืออายุ
if err != nil {
ctx.StopWithProblem(iris.StatusBadRequest, iris.NewProblem().
Title("Failed to create book").DetailErr(err))
// หมายเหตุ: ใช้ ctx.StopWithError(code, err) เมื่อคาคาMกหหรือปราททิกน้ากเพียlnืองพัอขพืlนชืRดน
return
}
println("Received book: " + b.Title)
ctx.StatusCode(iris.StatusCreated)
}
แบบแบ่งสถาปัตยกรรม MVC
นำเข้าแพ็กเกจ MVC
import "github.com/kataras/iris/v12/mvc"
กำหนดคอนโทรลเลอร์โดยใช้กลุ่มเส้นทาง
m := mvc.New(booksAPI)
m.Handle(new(BookController))
การประมวลผลคอนโทรลเลอร์
type BookController struct {
/* การฉีดฝอยของข้อมูล */
}
// ตอบสนอง GET: http://localhost:8080/books
func (c *BookController) Get() []Book {
return []Book{
{"Mastering Go Concurrency"},
{"Go Design Patterns"},
{"Black Hat Go"},
}
}
// ตอบสนอง POST: http://localhost:8080/books
func (c *BookController) Post(b Book) int {
println("ได้รับหนังสือ: " + b.Title)
return iris.StatusCreated
}
เริ่มเซิร์ฟเวอร์เว็บ Iris ของคุณ:
$ go run main.go
> ฟังก์ชันการฟังกระทำที่: http://localhost:8080
> แอพพลิเคชั่นถูกเริ่มต้น กด CTRL+C เพื่อปิดลง
ลิสต์หนังสือ:
$ curl --header 'Accept-Encoding:gzip' http://localhost:8080/books
[
{
"title": "Mastering Go Concurrency"
},
{
"title": "Go Design Patterns"
},
{
"title": "Black Hat Go"
}
]
สร้างหนังสือใหม่:
$ curl -i -X POST \
--header 'Content-Encoding:gzip' \
--header 'Content-Type:application/json' \
--data "{\"title\":\"Writing an Interpreter in Go\"}" \
http://localhost:8080/books
> HTTP/1.1 201 Created
นี่คือตัวอย่างของการตอบสนอง ข้อผิดพลาด:
$ curl -X POST --data "{\"title\" \"Invalid Book\"}" \
http://localhost:8080/books
> HTTP/1.1 400 Bad Request
{
"status": 400,
"title": "การสร้างหนังสือล้มเหลว",
"detail": "invalid character '\"' after object key"
}