GoFrame基础
GF(Go Frame)
是一款模块化、高性能、生产级的Go基础开发框架。实现了比较完善的基础设施建设以及开发工具链,提供了常用的基础开发模块,如:缓存、日志、队列、数组、集合、容器、定时器、命令行、内存锁、对象池、配置管理、资源管理、数据校验、数据编码、定时任务、数据库ORM、TCP/UDP组件、进程管理/通信等等。并提供了Web服务开发的系列核心组件,如:Router、Cookie、Session、Middleware、服务注册、模板引擎等等,支持热重启、热更新、域名绑定、TLS/HTTPS、Rewrite等特性。
安装
安装package
go get -u -v github.com/gogf/gf
基本使用
基本响应
package main
import (
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/net/ghttp"
)
func main() {
server := g.Server()
// 返回文本响应
server.BindHandler("/text", func(r *ghttp.Request) {
r.Response.Writefln("text response")
})
// 返回json响应
server.BindHandler("/json", func(r *ghttp.Request) {
// 传入map
r.Response.WriteJson(g.Map{"data": "ivy"})
// 传入结构体
type User struct {
Username string `json:"username"`
}
user := User{
Username: "ivy",
}
r.Response.WriteJson(user)
})
server.SetPort(80)
server.Run()
}
路由规则
url参数获取
package main
import (
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/net/ghttp"
)
func main() {
server := g.Server()
// 获取路由
server.BindHandler("/users/{id}", func(r *ghttp.Request) {
r.Response.Writeln(r.Get("id"))
})
server.BindHandler("/articles/{id}/comment", func(r *ghttp.Request) {
r.Response.Writeln(r.Get("id"))
})
server.SetPort(80)
server.Run()
}
路由分组
package main
import (
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/net/ghttp"
)
func main() {
server := g.Server()
// 路由分组
user := server.Group("/user")
{
user.GET("/login", func(r *ghttp.Request) {
r.Response.Writefln("login")
})
user.GET("/register", func(r *ghttp.Request) {
r.Response.Writefln("register")
})
}
server.SetPort(80)
server.Run()
}
对象注册
package main
import (
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/net/ghttp"
)
type User struct{}
func (u *User) Login(r *ghttp.Request) {
r.Response.Writefln("login")
}
func (u *User) Register(r *ghttp.Request) {
r.Response.Writefln("register")
}
func main() {
server := g.Server()
// 路由分组
user := new(User)
server.BindObject("/user", user)
server.SetPort(80)
server.Run()
}
这种注册方式会将绑定的struct的所有的接受者的方法的方法名的小写作为路由,在struct接收者的方法实现自己的逻辑
REST对象注册
package main
import (
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/net/ghttp"
)
type User struct{}
func (u *User) Get(r *ghttp.Request) {
r.Response.Writefln("get")
}
func (u *User) Post(r *ghttp.Request) {
r.Response.Writefln("post")
}
func main() {
server := g.Server()
// 路由分组
user := new(User)
server.BindObjectRest("/user", user)
server.SetPort(80)
server.Run()
}
这种绑定方式可以将请求方式分发到绑定对象的的请求方式的接收者的方法里面
Init和Shut
package main
import (
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/net/ghttp"
)
type User struct{}
func (*User) Init(r *ghttp.Request) {
r.Response.Writefln("init")
}
func (u *User) Get(r *ghttp.Request) {
r.Response.Writefln("get")
}
func (*User) Shut(r *ghttp.Request) {
r.Response.Writefln("shut")
}
func main() {
server := g.Server()
// 路由分组
user := new(User)
server.BindObjectRest("/user", user)
server.SetPort(80)
server.Run()
}
如果绑定的结构体有Init
和Shut
这两个方法,那么在请求之前会执行Init
在请求之后会执行Shut
,BindObjectRest
和BindObject
都适用
请求处理
package main
import (
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/net/ghttp"
)
func user(r *ghttp.Request) {
// 获取字符串
r.Response.Write(r.GetQuery("name", "默认的参数"))
// 获取int,如果传入的参数不符合int类型,那么默认为0
r.Response.Write(r.GetInt("age", 10))
// 获取表单数据
r.Response.Write(r.GetForm("username"))
}
func main() {
server := g.Server()
server.BindHandler("/user", user)
server.SetPort(80)
server.Run()
}
使用GetQuery
获取get传参。第一个参数为参数的key,第二个参数为当key不存在时,返回的默认的key的value
gf提供了类型的转换,如GetInt
, 可以将获取的value转换为int
,如何转换失败,那么将返回转换类型的零值
表单数据一般适用GetForm
来获取