Chương này giới thiệu cách lấy các tham số yêu cầu GET, POST và các tham số khác trong framework iris, bao gồm việc đọc và ghi cookie.

Tham số trong Đường dẫn

func main() {
    app := iris.Default()

    // Đoạn xử lý này sẽ khớp với /user/john, nhưng không khớp với /user/ hoặc /user
    app.Get("/user/{name}", func(ctx iris.Context) {
    name := ctx.Params().Get("name")
    ctx.Writef("Xin chào %s", name)
    })

    // Tuy nhiên, đoạn xử lý này sẽ khớp với /user/john/ và /user/john/send
    // Nếu không có bộ định tuyến nào khớp với /user/john, nó sẽ chuyển hướng đến /user/john/
    app.Get("/user/{name}/{action:path}", func(ctx iris.Context) {
    name := ctx.Params().Get("name")
    action := ctx.Params().Get("action")
    message := name + " " + action
    ctx.WriteString(message)
    })

    // Đối với mỗi yêu cầu khớp, ngữ cảnh sẽ giữ nguyên định nghĩa của bộ định tuyến
    app.Post("/user/{name:string}/{action:path}", func(ctx iris.Context) {
    ctx.GetCurrentRoute().Tmpl().Src == "/user/{name:string}/{action:path}" // true
    })

    app.Listen(":8080")
}

Các loại tham số sẵn có tích hợp:

Loại Tham số Kiểu Go Kiểm tra Hàm trợ giúp truy cập
:string string Bất kỳ nội dung nào (một phân đoạn đường dẫn) Params().Get
:uuid string uuidv4 hoặc v1 (một phân đoạn đường dẫn) Params().Get
:int int -9223372036854775808 đến 9223372036854775807 (x64) hoặc -2147483648 đến 2147483647 (x32), tùy thuộc vào kiến trúc máy chủ Params().GetInt
:int8 int8 -128 đến 127 Params().GetInt8
:int16 int16 -32768 đến 32767 Params().GetInt16
:int32 int32 -2147483648 đến 2147483647 Params().GetInt32
:int64 int64 -9223372036854775808 đến 9223372036854775807 Params().GetInt64
:uint uint 0 đến 18446744073709551615 (x64) hoặc 0 đến 4294967295 (x32), tùy thuộc vào kiến trúc máy chủ Params().GetUint
:uint8 uint8 0 đến 255 Params().GetUint8
:uint16 uint16 0 đến 65535 Params().GetUint16
:uint32 uint32 0 đến 4294967295 Params().GetUint32
:uint64 uint64 0 đến 18446744073709551615 Params().GetUint64
:bool bool "1" hoặc "t" hoặc "T" hoặc "TRUE" hoặc "true" hoặc "True" hoặc "0" hoặc "f" hoặc "F" hoặc "FALSE" hoặc "false" hoặc "False" Params().GetBool
:alphabetical string Chữ cái viết thường hoặc viết hoa Params().Get
:file string Chữ cái viết thường hoặc viết hoa, số, gạch dưới (_), gạch ngang (-), dấu chấm (.), không được chứa khoảng trắng hoặc ký tự đặc biệt khác không hợp lệ cho tên tệp Params().Get
:path string Bất kỳ nội dung nào, có thể được phân tách bằng dấu gạch chéo (các phân đoạn đường dẫn), nhưng nên là phần cuối cùng của đường dẫn bộ định tuyến Params().Get
:mail string Địa chỉ email, tên miền không được xác minh Params().Get
:email string Địa chỉ email, tên miền được xác minh Params().Get
:date string Định dạng yyyy/mm/dd, ví dụ /blog/{param:date} khớp với /blog/2022/04/21 Params().GetTimeParams().SimpleDate
:weekday uint (0-6) hoặc string Chuỗi cần phải là hằng số time.Weekday ("sunday" đến "monday" hoặc "Sunday" đến "Monday"), ví dụ /schedule/{param:weekday} khớp với /schedule/monday Params().GetWeekday

Lấy Tham Số Truy Vấn

func main() {
    app := iris.Default()

    // Phân tích tham số chuỗi truy vấn bằng cách sử dụng đối tượng yêu cầu cấp thấp hiện có.
    // Địa chỉ URL yêu cầu: /welcome?firstname=Jane&lastname=Doe
    app.Get("/welcome", func(ctx iris.Context) {
        firstname := ctx.URLParamDefault("firstname", "Guest")
        lastname := ctx.URLParam("lastname") // Phím tắt cho ctx.Request().URL.Query().Get("lastname")

        ctx.Writef("Xin chào %s %s", firstname, lastname)
    })
    app.Listen(":8080")
}

Lấy Tham Số Biểu Mẫu

func main() {
    app := iris.Default()

    app.Post("/form_post", func(ctx iris.Context) {
        message := ctx.PostValue("message")
        nick := ctx.PostValueDefault("nick", "Ẩn danh")

        ctx.JSON(iris.Map{
            "trạng thái":  "Đã xuất bản",
            "tin nhắn": message,
            "nick":    nick,
        })
    })
    app.Listen(":8080")
}

Ví dụ Kết Hợp của Tham Số Truy Vấn + Biểu Mẫu

POST /post?id=1234&page=1 HTTP/1.1
Content-Type: application/x-www-form-urlencoded

name=kataras&message=this_is_great
func main() {
    app := iris.Default()

    app.Post("/post", func(ctx iris.Context) {
        id, err := ctx.URLParamInt("id", 0)
        if err != nil {
            ctx.StopWithError(iris.StatusBadRequest, err)
            return
        }

        page := ctx.URLParamIntDefault("page", 0)
        name := ctx.PostValue("name")
        message := ctx.PostValue("message")

        ctx.Writef("id: %d; page: %d; name: %s; message: %s", id, page, name, message)
    })
    app.Listen(":8080")
}
id: 1234; page: 1; name: kataras; message: this_is_great

Truy xuất Tham Số Truy Vấn trong Yêu Cầu POST

POST /post?id=a&id=b&id=c&name=john&name=doe&name=kataras
Content-Type: application/x-www-form-urlencoded
func main() {
    app := iris.Default()

    app.Post("/post", func(ctx iris.Context) {

        ids := ctx.URLParamSlice("id")
        names, err := ctx.PostValues("name")
        if err != nil {
            ctx.StopWithError(iris.StatusBadRequest, err)
            return
        }

        ctx.Writef("ids: %v; names: %v", ids, names)
    })
    app.Listen(":8080")
}
ids: [a b c], names: [john doe kataras]

Đọc/Viết Cookie

import "github.com/kataras/iris/v12"

func main() {
    app := iris.Default()

    app.Get("/cookie", func(ctx iris.Context) {
        // Đọc cookie
        value := ctx.GetCookie("my_cookie")

        if value == "" {
            value = "ChưaĐặt"
            // Tạo cookie
            ctx.SetCookieKV("my_cookie", value)
            // Hoặc: ctx.SetCookie(&http.Cookie{...})
            // Tạo cookie
            ctx.SetCookie("", "kiểm tra", 3600, "/", "localhost", false, true)
        }

        ctx.Writef("Giá trị Cookie: %s \n", value)
    })

    app.Listen(":8080")
}