Baike.dev
All toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
D

dotweb

> 数据库
Open source

Simple and easy go web micro framework

1.4K stars0 likes0 views
WebsiteGitHub

About

Simple and easy go web micro framework

# DotWeb Simple and easy go web micro framework ## Requirements - **Go 1.24+** (最低版本要求) - 支持 go mod > 注意:Go 1.23 及以下版本存在标准库安全漏洞,建议使用 Go 1.24 或更高版本。 Document: https://www.kancloud.cn/devfeel/dotweb/346608 Guide: https://github.com/devfeel/dotweb/blob/master/docs/GUIDE.md ## 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能力 * 支持自定义Context * 集成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,以启用配置化 * 支持检查请求与指定路由是否匹配 ``` … ``` 接受两个参数,一个是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:
curl http://127.0.0.1/hello/devfeel
curl http://127.0.0.1/hello/category1/1 #### 4) group router ``` go g := server.Group("/user") g.GET("/", Index) g.GET("/profile", Profile) ``` test:
curl http://127.0.0.1/user
curl http://127.0.0.1/user/profile ## 6. Binder * HttpContext.Bind(interface{}) * Support data from json、xml、Form ``` go type UserInfo struct { UserName string `form:"user"` Sex int `form:"sex"` } func TestBind(ctx dotweb.HttpContext) error{ user := new(UserInfo) if err := ctx.Bind(user); err != nil { return ctx.WriteString("err => " + err.Error()) }else{ return ctx.WriteString("TestBind " + fmt.Sprint(user)) } } ``` ## 7. Middleware #### Middleware * 支持粒度:App、Group、RouterNode * DotWeb.Use(m ...Middleware) * Group.Use(m ...Middleware) * RouterNode.Use(m ...Middleware) * 启用顺序:App -> Group -> RouterNode,同级别下按Use的引入顺序执行 * 更多请参考:https://github.com/devfeel/middleware * [JWT](https://github.com/devfeel/middleware/tree/master/jwt) - [example](https://github.com/devfeel/middleware/tree/master/example/jwt) * [AccessLog](https://github.com/devfeel/middleware/tree/master/accesslog) - [example](https://github.com/devfeel/middleware/tree/master/example/accesslog) * [CORS](https://github.com/devfeel/middleware/tree/master/cors) - [example](https://github.com/devfeel/middleware/tree/master/example/cors) * [Gzip](https://github.com/devfeel/middleware/tree/master/gzip) - [example](https://github.com/devfeel/middleware/tree/master/example/gzip) * [authorization based on Casbin](https://github.com/devfeel/middleware/tree/master/authz) - [example](https://github.com/devfeel/middleware/tree/master/example/authz) - [what's Casbin?](https://github.com/casbin/casbin) * [BasicAuth](https://github.com/devfeel/middleware/tree/master/basicauth) - [example](https://github.com/devfeel/middleware/tree/master/example/basicauth) * [Domain](https://github.com/devfeel/middleware/tree/master/domain) - [example](https://github.com/devfeel/middleware/tree/master/example/domain) * Recover * HeaderOverride ``` … ``` ## 8. Server Config #### HttpServer: * HttpServer.EnabledSession 设置是否开启Session支持,目前支持runtime、redis两种模式,默认不开启 * HttpServer.EnabledGzip 设置是否开启Gzip支持,默认不开启 * HttpServer.EnabledListDir 设置是否启用目录浏览,仅对Router.ServerFile有效,若设置该项,则可以浏览目录文件,默认不开启 * HttpServer.EnabledAutoHEAD 设置是否自动启用Head路由,若设置该项,则会为除Websocket\HEAD外所有路由方式默认添加HEAD路由,非开发模式默认不开启 * HttpServer.EnabledAutoOPTIONS 设置是否自动启用Options路由,若设置该项,则会为除Websocket\HEAD外所有路由方式默认添加OPTIONS路由,非开发模式默认不开启 * HttpServer.EnabledIgnoreFavicon 设置是否忽略Favicon的请求,一般用于接口项目 * HttpServer.EnabledDetailRequestData 设置是否启用详细请求数据统计,默认为false,若设置该项,将启用ServerStateInfo中DetailRequestUrlData的统计 * HttpServer.EnabledTLS 设置是否启用TLS加密处理 * HttpServer.EnabledIgnoreFavicon 设置是否忽略favicon响应,默认为false,若设置该项,将会默认注册内集成的IgnoreFaviconModule,在路由生效前执行 * HttpServer.EnabledBindUseJsonTag 设置是否启用json tag生效于Bind接口,默认为false,若设置该项,将会在Bind执行时检查json tag #### Run Mode * 新增development、production模式 * 默认development,通过DotWeb.SetDevelopmentMode\DotWeb.SetProductionMode开启相关模式 * 若设置development模式,未处理异常会输出异常详细信息,同时启用日志开关,同时启用日志console打印,同时自动启用AutoHead&AutoOptions * 未来会拓展更多运行模式的配置 ## 9. Exception #### 500 error * Default: 当发生未处理异常时,会根据RunMode向页面输出默认错误信息或者具体异常信息,并返回 500 错误头 * User-defined: 通过DotServer.SetExceptionHandle(handler *ExceptionHandle)实现自定义异常处理逻辑 ``` go type ExceptionHandle func(Context, error) ``` #### 404 error * Default: 当发生404异常时,会默认使用http.NotFound处理 * User-defined: 通过DotWeb.SetNotFoundHandle(handler NotFoundHandle)实现自定义404处理逻辑 ``` go type NotFoundHandle func(http.ResponseWriter, *http.Request) ``` ## Dependency ### Go 版本要求 | Go 版本 | 支持状态 | 说明 | |---------|----------|------| | 1.26.x | ✅ 推荐使用 | 最新稳定版,CI 测试通过 | | 1.25.x | ✅ 支持 | CI 测试通过 | | 1.24.x | ✅ 支持 | **最低版本要求**,CI 测试通过 | | < 1.24 | ❌ 不支持 | 存在标准库安全漏洞 | > ⚠️ **安全警告**:Go 1.23 及以下版本存在以下安全漏洞: > - GO-2026-4341: net/url 内存耗尽 > - GO-2026-4340: crypto/tls 握手问题 > - GO-2025-4012: net/http cookie 解析 > - 等共 12 个漏洞 > > 详见 [Go Vulnerability Database](https://pkg.go.dev/vuln/) ### 第三方依赖 - websocket - golang.org/x/net/websocket - redis - github.com/garyburd/redigo - yaml - gopkg.in/yaml.v3 依赖管理使用 go mod。 ## 相关项目 #### LongWeb 项目简介:http长连接网关服务,提供Websocket及长轮询服务 #### yulibaozi.com 项目简介:基于dotweb与mapper的一款go的博客程序 #### Golang-Blog-Server 项目简介:基于dotweb的一款go的Blog(博客)服务端 #### TokenServer 项目简介:token服务,提供token一致性服务以及相关的全局ID生成服务等 #### Wechat-token 项目简介:微信Access Token中控服务器,用来统一管理各个公众号的access_token,提供统一的接口进行获取和自动刷新Access Token。 #### dotweb-start 项目简介:基于dotweb、dotlog、mapper、dottask、cache、database的综合项目模板。 ## Contact Us #### QQ-Group:193409346 - #### Gitter:[](https://gitter.im/devfeel-dotweb/wechat)

GitHub Issues· 0 open

View all on GitHub

No open issues yet, or sync has not completed.

Highlights

  • •Go 1.24+ (最低版本要求)
  • •支持 go mod
  • •支持go mod
  • •支持静态路由、参数路由、组路由
  • •路由支持文件/目录服务,支持设置是否允许目录浏览
  • •HttpModule支持,支持路由之前全局级别的自定义代码能力
  • •中间件支持,支持App、Group、Router级别的设置 - https://github.com/devfeel/middleware
  • •Feature支持,可绑定HttpServer全局启用
  • •支持STRING/JSON/JSONP/HTML格式输出
  • •集成Mock能力

> Tags

Gocachedotwebgogolang

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category数据库
PricingOpen source

> Related tools

P
PostgreSQL
功能强大的开源关系型数据库
R
Redis
内存数据结构存储,常用作缓存与队列
M
MySQL
广泛使用的开源关系型数据库