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
來獲取