Skip to content

irisAlex/golang.org

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Aresgo

aresgo是一个简单快速开发go应用的高性能框架,你可以用她来开发一些Api、Web及其他的一些服务应用,她是一个RESTful的框架。她包含快速的Http实现、Url路由与转发、Redis的实现、Mysql的CURD实现、JSON和INI配置文件的读写,以及其他一些方法的使用。后续会继续将一些常用应用添加到框架中。

产品特点(Features)

  • 实现思路借鉴iris-go,beego等框架
  • http实现封装了fasthttp,fasthttp的方法和实现可以直接使用,如果使用fasthttp请引入包:github.com/aresgo/router/fasthttp
  • mysql的实现封装了go-sql-driver,支持多数据库实例和主从配置,可以实现读写分离,并作了CURD的扩展,可以通过对象(struct)的方式进行修改
  • redis的实现封装garyburd/redigo,支持多个实例和主从配置,可以实现读写分离
  • 配置文件管理(Json和ini)采用beego的框架方法并做了一些修改,已集成到aresgo框架中可以很方便的使用

安装(Installation)

使用“go get”命令:

$ go get github.com/misgo/aresgo

用法(Usage)

使用aresgo框架,你只需要在源文件都加上:

import "github.com/aresgo"

或者如果使用框架中的某个包的方法,可以这样使用:

import "github.com/aresgo/text"

更多实例参见:aresgo-demo

http实现

import "github.com/aresgo"

func main(){

  //初始化路由
  router := aresgo.Routing()

  //定义404错误页
  router.Get("/404.html", NotFound)
  router.NotFound = NotFound  //只要访问不存在的方法或地址就会跳转这个页面

  //输出方法
  router.Get("/hello/:name", Hello)   //Get方法请求,Post请求时会报错
  router.Post("/hello/:name", Hello)  //Post方法请求,Get请求时会报错

  //注册对象,注册后对象(struct)的所有公共方法可以被调用
  router.Register("/passport/", &action.UserAction{}, aresgo.ActionGet) 
  
  //POST or GET or ...请求被拒绝时执行的方法,取决于路由方法的设置
  router.MethodNotAllowed = DisAllowedMethod  
  
  //监听IP与端口,阻塞式服务
  router.Listen(“127.0.0.1:8010”)

}
//404错误页
func NotFound(ctx *aresgo.Context) {
	fmt.Fprint(ctx, "页面不存在!\n")
}
// 欢迎页
func Hello(ctx *aresgo.Context) {
	fmt.Fprintf(ctx, "hello, 欢迎【%s】光临!\n", ctx.UserValue("name"))
}
  • 使用Register方法,注册的struct的公共方法可以被调用,方法名称需要首字母大写其他小写
  • 路由参数支持“:”和“*”
  • aresgo.Context继承fasthttp.RequestCtx,维护一个请求的上下文
  • cookie和session的实现目前使用fasthttp中的实现并未集成到框架,后续会持续封装。如使用请导入包:github.com/aresgo/router/fasthttp

更多http实例参见:aresgo-demo/Server.go

mysql实现

导入aresgo框架

import "github.com/aresgo"

需要指定数据库配置的路径:

aresgo.DbConfigPath = [你的数据库配置文件路径]

  • 数据库配置路径是绝对路径
  • 数据库支持多数据库实例及主从配置
  • 配置文件格式是json格式:
{
    "dev": { 
        "master": {
            "ip": "127.0.0.1",  
            "port": "3306",
            "user": "root",
            "password": "123456",
            "charset": "utf8",
            "db": "gomaster",
        },
        "slave": {
            "ip": "127.0.0.1",
            "port": "3306",
            "user": "root",
            "password": "123456",
            "charset": "utf8",
            "db": "goslave",
        }
    },
    "online": {
           ...
        }
    }
}
  • 执行一段SQL:
> res, err := aresgo.D("dev").Execute(aresgo.DbInsert, "insert t_user set Username='test1' ")
  • 查询一行数据
> res,err := aresgo.D("dev").GetRow("SELECT Uid,Username,Email,Gender FROM t_user WHERE Uid<10")
  • 查询列表
res, err := aresgo.D("dev").Query("SELECT Uid,Username,Email,Gender FROM t_user WHERE Uid<10")
  • 删除
res, err:= aresgo.D("dev").Table("t_user").Where("Uid =?", 9).Delete()
  • 更新
fields := make(map[string]interface{})
fields["Username"] = "administrator"
fields["Password"] = "21232f297a57a5a743894a0e4a801fc3"
fields["Createtime"] = 1486463479
fields["Gender"] = 2
res, err:= aresgo.D("dev").Table("t_user").Where("Uid = ? ", 1).Update(fields)
  • 还可以进行对象操作,比如查询是否能在数据库找到此对象的映射 先定义一个对象(struct)
  //用户对象
  UserInfo struct {
     Uid        int64  `table:"t_user" key:"pk" auto:"1" `
     UserName   string `field:"Username"`
     Email      string
     Mobile     string
     Pwd        string `field:"Password"`
     NickName   string `field:"Nickname"`
     Gender     int8
     Birth      time.Time `type:"date"`
      CreateTime time.Time `field:"Createtime" type:"int"`
      Group      GroupInfo `key:"notfield"`
   }
   //用户组对象
   GroupInfo struct {
       Gid  int32
       Name string
    }
    
    func main(){
      var user UserInfo
      err := aresgo.D("dev").Where("Uid = ?", 3).Find(&user)
    }

tag标签:table->表名,filed->该字段在数据库中的字段名称,key->主键用pk,auto->是否是自增

更多数据库实例可以参见:aresgo-demo/Database.go

redis实现

导入aresgo框架

import "github.com/aresgo"

需要指定redis配置的路径:

aresgo.RedisConfigPath = [你的redis配置文件路径]

配置文件的Json格式

{
    "dev": {
        "master": {
            "ip": "10.168.31.33",
            "port": "6379",
            "password":"123456",
            "maxidle":10,
            "idletimeout":10,
            "maxactive":1024,
             "db":5
        },
        "slave": {
            "ip": "10.168.31.33",
            "port": "6379",
            "password":"",
            "maxidle":10,
            "idletimeout":10,
            "maxactive":1024,
            "db":5
        }
    },
    "other": {
       ...
      }
    }
}
  • 选择库
aresgo.R("dev").Select(5)
  • 获取一个字符串型数据
g1 :=aresgo.R("dev").GetString("c")
  • Get多条
g := aresgo.R("dev").GetStrList("a", "b", "c", "d", "e")
  • Set多条
  var setVals map[string]interface{} = make(map[string]interface{}, 0)
  setVals["v1"] = 1234567
  setVals["v2"] = "abcdefg"
  setVals["v3"] = false //布尔型保存后:true:1;false:0
  s := aresgo.R("dev").SetValues(setVals)
  • hash Get
hg1 :=aresgo.R("dev").GetString("h1", "v1") 

*设置键的失效时间

t1 :=aresgo.R("dev").SetTimeout("a", 60)

更多redis实现的例子参见aresgo-demo/Redis.go

配置文件操作

导入配置文件包

import(
    "github.com/aresgo"
    "github.com/aresgo/config"
)

实例化配置文件

jsonConfiger, err1:= aresgo.LoadConfig("json", [json配置文件路径])
iniConfiger, err 2:= aresgo.LoadConfig("ini", [ini配置文件路径])

Json文件内容

{
    "dev": {
        "master": {
            "ip": "10.168.31.33",
            "port": "6379",
            "password":"123456",
            "maxidle":10,
            "idletimeout":10,
            "maxactive":1024,
             "db":5
        },
        "slave": {
           ...
        }
    },
    "other": {
       ...
      }
    }
}

ini文件内容

[dev.master]
ip=127.0.0.1
port=6379
db=gomaster

获取数据库实例dev中主库配置master的ip地址:

json

ip := jsonConfiger.String("dev.master.ip")

ini

ip := iniConfiger.String("dev.master->ip")

获取数据库实例dev中主库配置master的ip2地址,如果不存在返回一个默认值:

json

ip := jsonConfiger.DefaultString("dev.master.ip2", "192.168.0.1")

ini

ip := iniConfiger.DefaultString("dev.master->ip2", "not choose")

获取数据库实例dev中主库配置的所有项

json

obj, err := jsonConfiger.GetVal("dev.master") 

ini

obj, err:= iniConfiger.GetSection("dev.master") 

> 更多redis实现的例子参见[aresgo-demo/Config.go](https://github.com/misgo/aresgo-demo/blob/master/Config.go)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages