https://github.com/oopsguy/tiny
A tiny Go web library for learning.
https://github.com/oopsguy/tiny
framework go golang learning library web
Last synced: 12 months ago
JSON representation
A tiny Go web library for learning.
- Host: GitHub
- URL: https://github.com/oopsguy/tiny
- Owner: oopsguy
- License: mit
- Created: 2019-06-05T15:33:14.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-06-05T16:32:39.000Z (over 6 years ago)
- Last Synced: 2024-12-31T10:30:05.812Z (about 1 year ago)
- Topics: framework, go, golang, learning, library, web
- Language: Go
- Homepage:
- Size: 5.86 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Tiny
个人学习 Go 而封装的简单 Web 开发库,其大部分依赖 Go 原生 http 包中的 API。
Tiny - a tiny Go web library for learning.
## 安装(Install)
```bash
go get -u github.com/oopsguy/tiny
```
## 用法(Usage)
```go
package main
import (
"fmt"
"log"
"github.com/oopsguy/tiny"
)
func main() {
server := tiny.Default()
server.SupportTemplate("web/template/**", nil)
server.Static("/static/", "web/static/")
router := server.Router()
// global-level middleware
router.Use(func(next tiny.Handler) tiny.Handler {
return func(ctx tiny.Ctx) error {
fmt.Println("Global Middleware")
return next(ctx)
}
})
router.GET("", func(c tiny.Ctx) error {
return c.Template("index.html", nil)
}, func(next tiny.Handler) tiny.Handler {
return func(ctx tiny.Ctx) error {
fmt.Println("Index Middleware")
return next(ctx)
}
})
// API module
apiRouter := router.Module("/api")
{
apiV1Router := apiRouter.Module("/v1")
apiV1Router.GET("/users", func(ctx tiny.Ctx) error {
return ctx.Content("users")
})
apiV2Router := apiRouter.Module("/v2")
apiV2Router.GET("/users", func(ctx tiny.Ctx) error {
return ctx.Content("users")
})
}
// admin module
adminRouter := router.Module("/admin")
{
adminRouter.Use(func(next tiny.Handler) tiny.Handler {
return func(ctx tiny.Ctx) error {
fmt.Println("Admin Middleware")
return next(ctx)
}
})
adminRouter.GET("/user", func(ctx tiny.Ctx) error {
return ctx.HTML("
User
")
}, func(next tiny.Handler) tiny.Handler {
return func(ctx tiny.Ctx) error {
fmt.Println("User Middleware")
return next(ctx)
}
})
adminRouter.GET("/posts", func(ctx tiny.Ctx) error {
return ctx.Content("Post")
})
}
if err := server.Run(":8484"); err != nil {
log.Fatal(err)
}
}
```
## 简介(Intro)
### 路由(Router)
```go
type Router interface {
Handlers() []HandlerInfo
Module(prefix string) Router
Use(middleware ...MiddlewareHandler) Router
Add(pattern, method string, handler Handler, middleware ...MiddlewareHandler) Router
ANY(pattern string, handler Handler, middleware ...MiddlewareHandler) Router
GET(pattern string, handler Handler, middleware ...MiddlewareHandler) Router
POST(pattern string, handler Handler, middleware ...MiddlewareHandler) Router
DELETE(pattern string, handler Handler, middleware ...MiddlewareHandler) Router
PUT(pattern string, handler Handler, middleware ...MiddlewareHandler) Router
PATCH(pattern string, handler Handler, middleware ...MiddlewareHandler) Router
OPTIONS(pattern string, handler Handler, middleware ...MiddlewareHandler) Router
HEAD(pattern string, handler Handler, middleware ...MiddlewareHandler) Router
}
```
### 模板渲染(Template Renderer)
默认使用 Go 的 `html.Template` 模板,你可以自己实现 `TemplateResolver` 来适配第三方模板引擎。
Go `html.Template` by default. You can register your own `TemplateResolver` to adapt third-party template engine.
```
func (t *Tiny) RegisterTemplateResolver(resolver TemplateResolver)
```
模板渲染器接口定义与默认实现:
Interface and default implementation:
```go
type TemplateResolver interface {
Render(name string, data interface{}) ([]byte, error)
}
type DefaultTplResolver struct {
TemplateResolver
Tpl *template.Template
}
```
## License
[MIT License](./LICENSE)