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().GetTime và Params().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")
}