1 Star 0 Fork 614

liuyang / gf

forked from John / gf 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

安装

go get -u gitee.com/johng/gf

介绍

gf是一款模块化、松耦合、轻量级、高性能的Web开发框架。开源项目地址(仓库保持实时同步): GiteeGithub

使用中有任何问题/建议,欢迎加入技术QQ群交流:116707870。如有优秀的框架使用案例,欢迎联系作者将地址展示到项目库中,您的牛逼将被世人所瞻仰。

特点

  1. 轻量级、高性能,模块化、松耦合设计,丰富的开发模块;
  2. 热重启、热更新特性,并支持Web界面及命令行管理接口;
  3. 专业的技术交流群,完善的开发文档,良好的中文化支持;
  4. 支持多种形式的服务注册特性,灵活高效的路由控制管理;
  5. 支持服务事件回调注册功能,可供选择的pprof性能分析模块;
  6. 支持配置文件及模板文件的自动检测更新机制,即修改即生效;
  7. 强大的数据/表单校验模块,支持常用的40种及自定义校验规则;
  8. 提供了对基本数据类型的并发安全封装,提供了常用的并发安全容器;
  9. 支持Go变量/Json/Xml/Yml/Toml任意数据格式之间的相互转换及创建;
  10. 强大的数据库管理模块,支持应用层级的集群管理、读写分离、负载均衡,方法及链式ORM操作;
  11. 更多特点请查阅框架手册( http://gf.johng.cn );

文档

贡献

gf是开源的、免费的软件,这意味着任何人都可以为其开发和进步贡献力量。 gf的项目源代码目前同时托管在 Gitee 和 Github 平台上,您可以选择您喜欢的平台来 fork 项目和合并你的贡献, 两个平台的仓库将会保持即时的同步。我们非常欢迎有更多的朋友加入到gf框架的开发中来, 您为gf所做出的任何贡献都将会被记录到gf的史册中。

使用

哈喽世界!

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.Write("哈喽世界!")
    })
    s.Run()
}

多域名支持

package main

import (
    "gitee.com/johng/gf/g"
    "gitee.com/johng/gf/g/net/ghttp"
)

func main() {
    s := g.Server()
    s.Domain("localhost1,localhost2,localhost3").BindHandler("/", func(r *ghttp.Request) {
        r.Response.Write("localhostx")
    })
    s.Run()
}

多端口支持

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()
}

服务注册

package main

import (
    "gitee.com/johng/gf/g/net/ghttp"
    "gitee.com/johng/gf/g/frame/gmvc"
)

// 定义业务相关的控制器对象
type ControllerUser struct {
    gmvc.Controller
}

// 定义操作逻辑 - 展示姓名
func (c *ControllerUser) Name() {
    c.Response.Write("John")
}

func main() {
    // 绑定控制器到指定URI,所有控制器的公开方法将会映射到指定URI末尾
    // 例如该方法执行后,查看效果可访问:
    // http://127.0.0.1:8199/user/name
    s := ghttp.GetServer()
    s.BindController("/user", &ControllerUser{})
    s.Run()
}

路由控制

package main

import "gitee.com/johng/gf/g/net/ghttp"

func main() {
    s := ghttp.GetServer()
    s.BindHandler("/:name/:action", func(r *ghttp.Request){
        r.Response.Write(r.Get("name"))
        r.Response.Write(r.Get("action"))
    })
    s.SetPort(8199)
    s.Run()
}

模板引擎

package main

import (
    "gitee.com/johng/gf/g/net/ghttp"
    "gitee.com/johng/gf/g/frame/gmvc"
)

type ControllerTemplate struct {
    gmvc.Controller
}

func (c *ControllerTemplate) Info() {
    c.View.Assign("name", "john")
    c.View.Assigns(map[string]interface{}{
        "age"   : 18,
        "score" : 100,
    })
    c.View.DisplayContent(`
        <html>
            <head>
                <title>gf template engine</title>
            </head>
            <body>
                <p>Name: {{.name}}</p>
                <p>Age:  {{.age}}</p>
                <p>Score:{{.score}}</p>
            </body>
        </html>
    `)
}

func main() {
    s := ghttp.GetServer()
    s.BindController("/template", &ControllerTemplate{})
    s.SetPort(8199)
    s.Run()
}

数据校验

rule := "url|min-length:11"
msgs := map[string]string{
    "url"       : "请输入正确的URL地址",
    "minlength" : "地址长度至少为:min位"
}
fmt.Println(gvalid.Check("http://gfjohngcn", rule, msgs))

数据库ORM

链式操作

ORM单例对象

// 获取默认配置的数据库对象(配置名称为"default")
db, err := gdb.New()
// 获取配置分组名称为"user-center"的数据库对象
db, err := gdb.New("user-center")

单表/联表查询

// 查询多条记录并使用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()

like查询

r, err := db.Table("user").Where("name like ?", "%john%").Select()

链式更新/删除

// 更新
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()

链式写入/保存

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()

链式批量写入

r, err := db.Table("user").Data(gdb.List{
    {"name": "john_1"},
    {"name": "john_2"},
    {"name": "john_3"},
    {"name": "john_4"},
}).Insert()

链式批量保存

r, err := db.Table("user").Data(gdb.List{
    {"uid":10000, "name": "john_1"},
    {"uid":10001, "name": "john_2"},
    {"uid":10002, "name": "john_3"},
    {"uid":10003, "name": "john_4"},
}).Save()

事务操作

开启事务操作

if tx, err := db.Begin(); err == nil {
    fmt.Println("开启事务操作")
}

事务回滚操作

if tx, err := db.Begin(); err == nil {
    r, err := tx.Save("user", gdb.Map{
        "uid"  :  1,
        "name" : "john",
    })
    tx.Rollback()
    fmt.Println(r, err)
}

事务提交操作

if tx, err := db.Begin(); err == nil {
    r, err := tx.Save("user", gdb.Map{
        "uid"  :  1,
        "name" : "john",
    })
    tx.Commit()
    fmt.Println(r, err)
}

事务链式操作

if tx, err := db.Begin(); err == nil {
    r, err := tx.Table("user").Data(gdb.Map{"uid":1, "name": "john"}).Save()
    tx.Commit()
    fmt.Println(r, err)
}

数据编码解析

// JSON
data :=
    `{
        "users" : {
            "count" : 100,
            "list"  : [
                {"name" : "Ming", "score" : 60},
                {"name" : "John", "score" : 99.5}
            ]
        }
    }`

if p, e := gparser.LoadContent([]byte(data), "json"); e != nil {
    glog.Error(e)
} else {
    fmt.Println("John Score:", p.GetFloat32("users.list.1.score"))
}
// XML
data :=
    `<?xml version="1.0" encoding="UTF-8"?>
     <note>
         <to>Tove</to>
         <from>Jani</from>
         <heading>Reminder</heading>
         <body>Don't forget me this weekend!</body>
     </note>`

if p, e := gparser.LoadContent([]byte(data), "xml"); e != nil {
    glog.Error(e)
} else {
    fmt.Println("Heading:", p.GetString("note.heading"))
}

...

更多特性及示例请查看官方开发文档:gf.johng.cn

MIT License Copyright (c) 2017 john@johng.cn http://johng.cn Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

模块化、松耦合、轻量级、高性能的Go语言Web开发框架。支持热重启、热更新、多域名、多端口、多服务、HTTP/HTTPS、动态路由等特性,并提供了Web服务开发的系列核心组件,如:MVC、Cookie、Session、服务注册、配置管理、模板引擎、数据校验、分页管理、数据库ORM等等等等,并且提供了数十个实用开发模块集,如:缓存、日志、命令行、二进制、文件锁、数据编码、进程管理、进程通信、并发安全容器、Goroutine池等等等等等等。 展开 收起
Go
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Go
1
https://gitee.com/ctosoft/gf.git
git@gitee.com:ctosoft/gf.git
ctosoft
gf
gf
master

搜索帮助

14c37bed 8189591 565d56ea 8189591