شروع کردن با چارچوب وب Go Iris
نصب
توجه: نیاز به نسخه 1.20 یا بالاتر Go است.
$ 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")
{
// استفاده از وسیله کمکی
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) برای اتصال داده ورودی هر نوعی.
if err != nil {
ctx.StopWithProblem(iris.StatusBadRequest, iris.NewProblem().
Title("Failed to create book").DetailErr(err))
// توجه: استفاده از ctx.StopWithError(code, err) در صورت انتظار پاسخ متن ساده فقط در صورت خطا است.
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{
{"تسلط بر همزمانی Go"},
{"الگوهای طراحی Go"},
{"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": "تسلط بر همزمانی Go"
},
{
"title": "الگوهای طراحی Go"
},
{
"title": "Go سیاه"
}
]
ایجاد یک کتاب جدید:
$ curl -i -X POST \
--header 'Content-Encoding:gzip' \
--header 'Content-Type:application/json' \
--data "{\"title\":\"نوشتن یک مفسر در Go\"}" \
http://localhost:8080/books
> HTTP/1.1 201 Created
این یک مثال از پاسخ خطا است:
$ curl -X POST --data "{\"title\": \"کتاب نامعتبر\"}" \
http://localhost:8080/books
> HTTP/1.1 400 Bad Request
{
"status": 400,
"title": "شکست ایجاد کتاب",
"detail": "invalid character '\"' after object key"
}