• goframe-入门


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

    如果绑定的结构体有InitShut这两个方法,那么在请求之前会执行Init在请求之后会执行ShutBindObjectRestBindObject都适用

    请求处理

    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来获取

  • 相关阅读:
    Java之抽象类,多态,接口
    Java之抽象类,多态
    Java之类。实例初始化
    Java基础之继承
    java面向对象之工具类
    Java基础面向对象封装
    Python入门学习资料推荐
    内网安全「攻防」学习指南
    windows文件扩展名
    java 的包命名规范
  • 原文地址:https://www.cnblogs.com/ivy-blogs/p/13144135.html
Copyright © 2020-2023  润新知