diff --git a/README.MD b/README.MD index e5cbe5381..1d1d6be6a 100644 --- a/README.MD +++ b/README.MD @@ -3,7 +3,7 @@ -GF(Go Frame)是一款模块化、松耦合、轻量级、高性能的Go应用开发框架。支持热重启、热更新、多域名、多端口、多服务、HTTP/HTTPS、动态路由等特性 +`GF(Go Frame)`是一款模块化、松耦合、轻量级、高性能的Go应用开发框架。支持热重启、热更新、多域名、多端口、多服务、HTTP/HTTPS、动态路由等特性 ,并提供了Web服务开发的系列核心组件,如:Router、Cookie、Session、服务注册、配置管理、模板引擎、数据校验、分页管理、数据库ORM等等等等, 并且提供了数十个内置核心开发模块集,如:缓存、日志、时间、命令行、二进制、文件锁、内存锁、对象池、连接池、数据编码、进程管理、进程通信、文件监控、定时任务、TCP/UDP组件、 并发安全容器等等等等等等。 @@ -23,6 +23,12 @@ go get -u gitee.com/johng/gf golang版本 >= 1.9.2 ``` +# 架构 +
+ +
+ + # 特点 1. 轻量级、高性能,模块化、松耦合设计,丰富的开发模块; 1. 热重启、热更新特性,并支持Web界面及命令行管理接口; @@ -39,11 +45,10 @@ golang版本 >= 1.9.2 1. 更多特点请查阅框架[手册](https://gfer.me)和[源码](https://godoc.org/github.com/johng-cn/gf); # 文档 -GoFrame开发文档:[gfer.me](https://gfer.me) +[https://gfer.me](https://gfer.me) # 使用 -## Hello World ```go package main @@ -59,123 +64,4 @@ func main() { }) s.Run() } -``` -## 多域名支持 -```go -package main - -import ( - "gitee.com/johng/gf/g" - "gitee.com/johng/gf/g/net/ghttp" -) - -func main() { - s := g.Server() - s.Domain("localhost1,localhost2").BindHandler("/", func(r *ghttp.Request) { - r.Response.Write("localhostx") - }) - s.Run() -} -``` -## 多端口支持 -```go -package main - -import ( - "gitee.com/johng/gf/g" - "gitee.com/johng/gf/g/net/ghttp" -) - -func main() { - s := g.Server() - s.BindHandler("/", func(r *ghttp.Request){ - r.Response.Writeln("go frame!") - }) - s.SetPort(8080, 8081, 8082) - s.Run() -} -``` -## 路由控制 -```go -package main - -import ( - "gitee.com/johng/gf/g" - "gitee.com/johng/gf/g/net/ghttp" -) - -func main() { - s := g.Server() - s.BindHandler("/order/:action/{page}.html", func(r *ghttp.Request){ - r.Response.Writef("action:%s, page:%s", r.Get("action"), r.Get("page")) - }) - s.SetPort(8199) - s.Run() -} -``` - -## 数据库ORM - -### ORM创建/关闭 - -```go -// 获取默认配置的单例数据库对象(配置名称为"default") -db, err := gdb.DB() -// 获取配置分组名称为"user-center"的单例数据库对象 -db, err := gdb.DB("user-center") -// 无须显示Close,数据库引擎底层采用了链接池设计,当链接不再使用时会自动关闭 -``` -### 单表/联表查询 -```go -// 查询多条记录并使用Limit分页 -r, err := db.Table("user").Where("u.uid > ?", 1).Limit(0, 10).Select() -// 查询符合条件的单条记录(第一条) -r, err := db.Table("user u").LeftJoin("user_detail ud", "u.uid=ud.uid").Fields("u.*,ud.site").Where("u.uid=?", 1).One() -// 查询指定字段值 -r, err := db.Table("user u").RightJoin("user_detail ud", "u.uid=ud.uid").Fields("ud.site").Where("u.uid=?", 1).Value() -// 分组及排序 -r, err := db.Table("user u").InnerJoin("user_detail ud", "u.uid=ud.uid").Fields("u.*,ud.city").GroupBy("city").OrderBy("register_time asc").Select() -// 不使用john的联表查询 -r, err := db.Table("user u,user_detail ud").Where("u.uid=ud.uid").Fields("u.*,ud.city").All() -// 不使用Fields方法指定查询字段时,默认查询为"*" -r, err := db.Table("user").Where("u.uid=1",).One() -``` - -### 更新/删除 -```go -// 更新 -r, err := db.Table("user").Data(gdb.Map{"name" : "john2"}).Where("name=?", "john").Update() -r, err := db.Table("user").Data("name='john3'").Where("name=?", "john2").Update() -// 删除 -r, err := db.Table("user").Where("uid=?", 10).Delete() -// Data数值方法的参数形式比较灵活 -r, err := db.Table("user").Data(`name="john"`).Update() -r, err := db.Table("user").Data("name", "john").Update() -r, err := db.Table("user").Data(g.Map{"name" : "john"}).Update() -``` -### 写入/保存 -```go -r, err := db.Table("user").Data(gdb.Map{"name": "john"}).Insert() -r, err := db.Table("user").Data(gdb.Map{"uid": 10000, "name": "john"}).Replace() -r, err := db.Table("user").Data(gdb.Map{"uid": 10001, "name": "john"}).Save() -``` - -### 事务操作 - -```go -if tx, err := db.Begin(); err == nil { - if r, err := tx.Table("user").Data(gdb.Map{"uid":1, "name": "john"}).Save(); err == nil { - tx.Commit() - } else { - tx.Rollback() - } - - fmt.Println(r, err) -} -``` - - -... - - -更多特性及示例请查看官方开发文档:[gfer.me](https://gfer.me) +``` \ No newline at end of file