# dotweb **Repository Path**: devfeel/dotweb ## Basic Information - **Project Name**: dotweb - **Description**: 一款简洁大方的 go 语言 web 开发框架,并辅助以众多实用精致功能组件,帮助开发人员更方便的构建应用 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 73 - **Forks**: 6 - **Created**: 2018-01-09 - **Last Updated**: 2025-08-22 ## Categories & Tags **Categories**: webframework **Tags**: None ## README
## 1. Install
```
go get github.com/devfeel/dotweb
```
## 2. Getting Started
```go
package main
import (
"fmt"
"github.com/devfeel/dotweb"
)
func main() {
//init DotApp
app := dotweb.New()
//set log path
app.SetLogPath("/home/logs/wwwroot/")
//set route
app.HttpServer.GET("/index", func(ctx dotweb.Context) error{
return ctx.WriteString("welcome to my first web!")
})
//begin server
fmt.Println("dotweb.StartServer begin")
err := app.StartServer(80)
fmt.Println("dotweb.StartServer error => ", err)
}
```
#### examples: https://github.com/devfeel/dotweb-example
## 3. Features
* 支持go mod
* 支持静态路由、参数路由、组路由
* 路由支持文件/目录服务,支持设置是否允许目录浏览
* HttpModule支持,支持路由之前全局级别的自定义代码能力
* 中间件支持,支持App、Group、Router级别的设置 - https://github.com/devfeel/middleware
* Feature支持,可绑定HttpServer全局启用
* 支持STRING/JSON/JSONP/HTML格式输出
* 集成Mock能力
* 集成Timeout Hook
* 全局HTTP错误处理
* 全局日志处理
* 支持Hijack与websocket
* 内建Cache支持
* 内建Session支持 - 支持主备redis自动切换
* 内建TLS支持
* 支持接入第三方模板引擎(需实现dotweb.Renderer接口)
* 模块可配置
* 自集成基础统计数据,并支持按分钟为单位的间隔时间统计数据输出
#### Config Example
* [dotweb.conf](https://github.com/devfeel/dotweb/blob/master/example/config/dotweb.conf)
* [dotweb.json](https://github.com/devfeel/dotweb/blob/master/example/config/dotweb.json)
## 4. Performance
DotWeb | 1.9.2 | 16core16G | | | | | | | | | | |
-- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | --
cpu | 内存 | Samples | Average | Median | 90%Line | 95%Line | 99%Line | Min | Max | Error% | Throughput | Received KB/Sec | Send KB/Sec
40% | 39M | 15228356 | 19 | 4 | 43 | 72 | 204 | 0 | 2070 | 0.00% | 48703.47 | 7514.79 | 8656.28
40% | 42M | 15485189 | 18 | 4 | 41 | 63 | 230 | 0 | 3250 | 0.00% | 49512.99 | 7639.7 | 8800.16
40% | 44M | 15700385 | 18 | 3 | 41 | 64 | 233 | 0 | 2083 | 0.00% | 50203.32 | 7746.22 | 8922.86
| | | | | | | | | | | | |
ECHO | 1.9.2 | 16core16G | | | | | | | | | | |
cpu | 内存 | Samples | Average | Median | 90%Line | 95%Line | 99%Line | Min | Max | Error% | Throughput | Received KB/Sec | Send KB/Sec
38% | 35M | 15307586 | 19 | 4 | 44 | 76 | 181 | 0 | 1808 | 0.00% | 48951.22 | 6166.71 | 9034.94
36% | 35M | 15239058 | 19 | 4 | 45 | 76 | 178 | 0 | 2003 | 0.00% | 48734.26 | 6139.37 | 8994.9
37% | 37M | 15800585 | 18 | 3 | 41 | 66 | 229 | 0 | 2355 | 0.00% | 50356.09 | 6343.68 | 9294.24
| | | | | | | | | | | | |
Gin | 1.9.2 | 16core16G | | | | | | | | | | |
cpu | 内存 | Samples | Average | Median | 90%Line | 95%Line | 99%Line | Min | Max | Error% | Throughput | Received KB/Sec | Send KB/Sec
36% | 36M | 15109143 | 19 | 6 | 44 | 71 | 175 | 0 | 3250 | 0.00% | 48151.87 | 5877.91 | 8746.33
36% | 40M | 15255749 | 19 | 5 | 43 | 70 | 189 | 0 | 3079 | 0.00% | 48762.53 | 5952.45 | 8857.25
36% | 40M | 15385401 | 18 | 4 | 42 | 66 | 227 | 0 | 2312 | 0.00% | 49181.03 | 6003.54 | 8933.27
## 5. Router
#### 1) 常规路由
* 支持GET\POST\HEAD\OPTIONS\PUT\PATCH\DELETE 这几类请求方法
* 支持HiJack\WebSocket\ServerFile三类特殊应用
* 支持Any注册方式,默认兼容GET\POST\HEAD\OPTIONS\PUT\PATCH\DELETE方式
* 支持通过配置开启默认添加HEAD方式
* 支持注册Handler,以启用配置化
* 支持检查请求与指定路由是否匹配
```go
1、Router.GET(path string, handle HttpHandle)
2、Router.POST(path string, handle HttpHandle)
3、Router.HEAD(path string, handle HttpHandle)
4、Router.OPTIONS(path string, handle HttpHandle)
5、Router.PUT(path string, handle HttpHandle)
6、Router.PATCH(path string, handle HttpHandle)
7、Router.DELETE(path string, handle HttpHandle)
8、Router.HiJack(path string, handle HttpHandle)
9、Router.WebSocket(path string, handle HttpHandle)
10、Router.Any(path string, handle HttpHandle)
11、Router.RegisterRoute(routeMethod string, path string, handle HttpHandle)
12、Router.RegisterHandler(name string, handler HttpHandle)
13、Router.GetHandler(name string) (HttpHandle, bool)
14、Router.MatchPath(ctx Context, routePath string) bool
```
接受两个参数,一个是URI路径,另一个是 HttpHandle 类型,设定匹配到该路径时执行的方法;
#### 2) static router
静态路由语法就是没有任何参数变量,pattern是一个固定的字符串。
```go
package main
import (
"github.com/devfeel/dotweb"
)
func main() {
dotapp := dotweb.New()
dotapp.HttpServer.GET("/hello", func(ctx dotweb.Context) error{
return ctx.WriteString("hello world!")
})
dotapp.StartServer(80)
}
```
test:
curl http://127.0.0.1/hello
#### 3) parameter router
参数路由以冒号 : 后面跟一个字符串作为参数名称,可以通过 HttpContext的 GetRouterName 方法获取路由参数的值。
```go
package main
import (
"github.com/devfeel/dotweb"
)
func main() {
dotapp := dotweb.New()
dotapp.HttpServer.GET("/hello/:name", func(ctx dotweb.Context) error{
return ctx.WriteString("hello " + ctx.GetRouterName("name"))
})
dotapp.HttpServer.GET("/news/:category/:newsid", func(ctx dotweb.Context) error{
category := ctx.GetRouterName("category")
newsid := ctx.GetRouterName("newsid")
return ctx.WriteString("news info: category=" + category + " newsid=" + newsid)
})
dotapp.StartServer(80)
}
```
test:
#### Gitter:[](https://gitter.im/devfeel-dotweb/wechat)