+
Skip to content

zhitoo/g3

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

⚡ G3

microframework

نصب

go get github.com/zhitoo/g3
package main

import (
	"fmt"
	"log"
	"strconv"

	"github.com/zhitoo/g3"
)

type User struct {
	Name []string `form:"name"`
	Age  int      `form:"age"`
}

func main() {
	g := g3.New(":5500")

	g.Group("/users/{id}", func() {
		g.Use(func(next g3.Controller) g3.Controller {
			return func(r *g3.Request) (g3.Response, error) {
				fmt.Println("👉 New Request received From " + r.PathParams["id"])
				return next(r)
			}
		})
		g.Get("/", func(r *g3.Request) (g3.Response, error) {
			response := g3.Response{}
			response.Body = []byte("All Users")
			return response, nil
		})
	})

	g.Get("/", func(r *g3.Request) (g3.Response, error) {
		response := g3.Response{}
		response.Body = []byte("Hello World")
		fmt.Println("Query Param", r.Get("name"))
		return response, nil
	}).Post("/", func(r *g3.Request) (g3.Response, error) {
		res := g3.Response{}

		r.AddValidation("name", func(r *g3.Request) (bool, string) {
			value, ok := r.PostParams["name"]
			if ok {
				if len(value[0]) < 5 {
					return false, "name must at least be 5 chars"
				}
			} else {
				return false, "name is required"
			}
			return true, ""
		}).AddValidation("age", func(r *g3.Request) (bool, string) {
			age, ok := r.PostParams["age"]
			if ok {
				ageNum, err := strconv.Atoi(age[0])
				if err != nil {
					return false, "age must be a valid number"
				}
				if ageNum < 12 {
					return false, "age must gt than 12"
				}
				if ageNum > 75 {
					return false, "age must st than 75"
				}
			} else {
				return false, "age is required"
			}
			return true, ""
		})

		err := r.Validate()
		if err != nil {
			res.SetStatusCode(422)
			return res, err
		}

		user := User{}
		err = r.Bind(&user)
		if err != nil {
			res.Body = []byte(err.Error())
			res.SetStatusCode(400)
			return res, nil
		}
		fmt.Printf("User: %+v\n", user)

		res.Body = []byte("Hello World!!! POST")
		res.SetStatusCode(201)
		return res, nil
	})

	g.Use(func(next g3.Controller) g3.Controller {
		return func(r *g3.Request) (g3.Response, error) {
			fmt.Println("👉 New Request received")
			return next(r)
		}
	})

	g.Get("/hello/{name}", func(r *g3.Request) (g3.Response, error) {
		response := g3.Response{}

		response.Redirect("/users/"+r.PathParams["name"], 301)

		return response, nil
	})
	log.Fatal(g.Serve())

}

About

a lightweight microframework in go

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载