গো আইরিস ওয়েব ফ্রেমওয়ার্ক দিয়ে শুরু করা

ইনস্টলেশন

লক্ষ্য করুন: গো সংস্করণ 1.20 বা তার উর্ধকে প্রয়োজন।

$ mkdir myapp
$ cd myapp
$ go mod init myapp
$ go get github.com/kataras/iris/v12@latest

কোডে ইমপোর্ট করুন:

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

ইনস্টলেশনের সমস্যা নিরসন

ইনস্টলেশনের সময় নেটওয়ার্ক ত্রুটির সম্মুখীন হলে, নিশ্চিত করুন যে জিওপ্রক্সি ইউতি পরিবর্তন মূল্যের হয়।

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))
        // লক্ষ্য করুন: চেহারাপূর্ণ টেক্সট প্রতিক্রিয়ার ক্ষেত্রে শুধু মৌলিক প্রত্যুত্তরের আনুমানিক সময় ব্যবহার করুন।
        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 {
    /* ডিপেন্ডেন্সি ইনজেকশন */
}

// প্রতিক্রিয়া দিন: 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": "অবৈধ অক্ষর '\"' অবজেক্ট কী এর পরে"
}