Bắt đầu với Framework Web Go Iris
Cài đặt
Ghi chú: Yêu cầu phiên bản Go từ 1.20 trở lên.
$ mkdir myapp
$ cd myapp
$ go mod init myapp
$ go get github.com/kataras/iris/v12@latest
Nhúng nó vào mã của bạn:
import "github.com/kataras/iris/v12"
Sửa lỗi cài đặt
Nếu bạn gặp lỗi mạng trong quá trình cài đặt, hãy đảm bảo rằng biến môi trường GOPROXY được đặt thành giá trị hợp lệ.
go env -w GOPROXY=https://goproxy.io,direct
Nếu các phương pháp trên không giải quyết vấn đề, hãy xóa bộ nhớ cache của module go:
go clean --modcache
Bắt đầu nhanh
Chế độ chức năng
$ cat main.go
package main
import "github.com/kataras/iris/v12"
func main() {
// Định nghĩa instance của iris
app := iris.New()
// Định nghĩa nhóm route (ở đây định nghĩa nhóm route với tiền tố /books)
booksAPI := app.Party("/books")
{
// Sử dụng middleware
booksAPI.Use(iris.Compression)
// Đặt routes và route handlers
// GET: http://localhost:8080/books
booksAPI.Get("/", list)
// POST: http://localhost:8080/books
booksAPI.Post("/", create)
}
// Lắng nghe trên cổng
app.Listen(":8080")
}
// Ví dụ về sách.
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)
// Ghi chú: Đàm phán phản hồi dựa trên ưu tiên của máy chủ và sở thích của máy khách
// thay vì sử dụng ctx.JSON:
// ctx.Negotiation().JSON().MsgPack().Protobuf()
// ctx.Negotiate(books)
}
func create(ctx iris.Context) {
var b Book
err := ctx.ReadJSON(&b)
// Ghi chú: sử dụng ctx.ReadBody(&b) để ràng buộc dữ liệu đầu vào của bất kỳ loại nào.
if err != nil {
ctx.StopWithProblem(iris.StatusBadRequest, iris.NewProblem().
Title("Failed to create book").DetailErr(err))
// Ghi chú: Sử dụng ctx.StopWithError(code, err) khi chỉ mong đợi một phản hồi văn bản thuần túy chỉ trong trường hợp lỗi.
return
}
println("Received book: " + b.Title)
ctx.StatusCode(iris.StatusCreated)
}
Mô hình kiến trúc MVC
Nhập gói MVC
import "github.com/kataras/iris/v12/mvc"
Thiết lập controller dựa trên nhóm route
m := mvc.New(booksAPI)
m.Handle(new(BookController))
Triển khai Controller
type BookController struct {
/* Dependency Injection */
}
// Xử lý GET: http://localhost:8080/books
func (c *BookController) Get() []Book {
return []Book{
{"Mastering Go Concurrency"},
{"Go Design Patterns"},
{"Black Hat Go"},
}
}
// Xử lý POST: http://localhost:8080/books
func (c *BookController) Post(b Book) int {
println("Đã nhận sách: " + b.Title)
return iris.StatusCreated
}
Chạy máy chủ web Iris của bạn:
$ go run main.go
> Đang lắng nghe tại: http://localhost:8080
> Ứng dụng đã khởi động. Nhấn CTRL+C để tắt.
Liệt kê sách:
$ curl --header 'Accept-Encoding:gzip' http://localhost:8080/books
[
{
"title": "Mastering Go Concurrency"
},
{
"title": "Go Design Patterns"
},
{
"title": "Black Hat Go"
}
]
Tạo một sách mới:
$ 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
Đây là một ví dụ về phản hồi lỗi:
$ curl -X POST --data "{\"title\" \"Invalid Book\"}" \
http://localhost:8080/books
> HTTP/1.1 400 Bad Request
{
"status": 400,
"title": "Tạo sách thất bại",
"detail": "ký tự không hợp lệ '\"' sau khóa object"
}