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() {
// وضاحت آئرس کی ایک نمونہ
app := iris.New()
// ایک راک گروپ کو وضان
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("کتاب کی تشکیل کرنے میں ناکام").DetailErr(err))
// نوٹ: خود متن جواب کی صورت میں صرف ہنگامی حالت میں اکیے کے حالت میں صرف ctx.StopWithError(code, err) کا استعمال کریں۔
return
}
println("موصول کردہ کتاب: " + b.Title)
ctx.StatusCode(iris.StatusCreated)
}
MVC Architectural Pattern
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{
{"ماسٹرنگ گو متفاقمی"},
{"گو ڈیزائن پیٹرنز"},
{"کالے ہیٹ گو"},
}
}
// 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": "ماسٹرنگ گو متفاقمی"
},
{
"title": "گو ڈیزائن پیٹرنز"
},
{
"title": "کالے ہیٹ گو"
}
]
نیا کتاب بنائیں:
$ curl -i -X POST \
--header 'Content-Encoding:gzip' \
--header 'Content-Type:application/json' \
--data "{\"title\":\"گو میں انٹرپریٹر لکھنا\"}" \
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": "آبجیکٹ کی کی آخری میں غلط علامت"
}