गो Iris वेब फ्रेमवर्क के साथ शुरुआत

स्थापना

नोट: गो संस्करण 1.20 या उच्च आवश्यक है।

$ 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 clean --modcache

त्वरित प्रारंभ

कार्यात्मक मोड

$ cat main.go
package main

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

func main() {
    // आयरिस इंस्टेंस को परिभाषित करें
    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{
        {"Mastering Go Concurrency"},
        {"Go Design Patterns"},
        {"Black Hat 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": "Mastering Go Concurrency"
  },
  {
    "title": "Go Design Patterns"
  },
  {
    "title": "Black Hat Go"
  }
]

नई पुस्तक बनाएं:

$ 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

यह एक त्रुटि प्रतिसाद का उदाहरण है:

$ curl -X POST --data "{\"title\" \"Invalid Book\"}" \
http://localhost:8080/books

> HTTP/1.1 400 Bad Request

{
  "status": 400,
  "title": "पुस्तक निर्माण असफल हुआ",
  "detail": "ऑब्जेक्ट कुंजी के बाद अमान्य अक्षर"
}