การเริ่มต้นใช้งานกับเฟรมเวิร์คเว็บ 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"
}