配置引入
由于boot和router包使用了init包初始化方式来进行相关配置,因此我们需要使用:
import _ "PATH"
需要注意,由于Go的import存在先后顺序,往往需要将这两个包置于main.go所有业务包的最上方引入。
main包
每个项目至少存在一个package main,用于程序的入口执行。
/main.go
package main
import (
_ "github.com/gogf/gf-demos/boot"
_ "github.com/gogf/gf-demos/router"
"github.com/gogf/gf/frame/g"
)
func main() {
g.Server().Run()
}
需要非常注意:boot包的引入往往需要在main包中的最顶层位置,以保证应用的初始化最开始进行。特别是一些单例对象的初始化/配置管理操作往往放在boot包中,这样其他包才能正常使用到这些单例对象。
这里建议引入boot包、router包和其他包之间加入一个空行以作区分,特别是Goland IDE的import插件不会将引入包进行自动排序。
编译运行
我们可以使用IDE执行运行,也可以使用以下命令编译运行。
$ go build main.go
$ ./main
接口测试
1. 用户注册 - /user/signup
注册一个账号test001,昵称为john,密码为123456。
curl -d 'nickname=john&passport=test001&password=123456&password2=123456' http://127.0.0.1:8199/user/signup
{"data":null,"code":0,"message":"ok"}
curl -d 'nickname=john&passport=test001&password=123456&password2=123456' http://127.0.0.1:8199/user/signup
{"data":null,"code":1,"message":"账号 test001 已经存在"}
2.用户登录 - /user/signin
我们先访问获取用户信息的接口,验证鉴权中间件是否生效。
curl http://127.0.0.1:8199/user/profile
Forbidden
我们用刚才注册的账号登录。
curl -i -d 'passport=test001&password=123456' http://127.0.0.1:8199/user/signin
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin,Content-Type,Accept,User-Agent,Cookie,Authorization,X-Auth-Token,X-Requested-With
Access-Control-Allow-Methods: GET,PUT,POST,DELETE,PATCH,HEAD,CONNECT,OPTIONS,TRACE
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 3628800
Content-Type: application/json
Server: gf-demos
Set-Cookie: gfsessionid=BZT1SP2OX980EHALYV; Path=/; Expires=Sun, 10 Jan 2021 14:56:36 GMT
Date: Sat, 11 Jan 2020 14:56:36 GMT
Content-Length: 37
{"code":0,"message":"ok","data":null}
我们这里使用了-i选项用于终端打印出服务端返回的Header信息,目的是为了获取sessionid。GF框架默认的sessionid名称为gfsessionid,我们看到返回的Header中已经有了,并且是通过Cookie方式返回的。
随后我们再次访问获取用户信息接口,并且这次提交gfsessionid,该信息可以通过Header也可以通过Cookie提交,服务端都是能够自动识别的。
curl -H 'gfsessionid:BZT1SP2OX980EHALYV' http://127.0.0.1:8199/user/profile
{"code":0,"message":"","data":{"id":1,"passport":"test001","password":"123456","nickname":"john","create_time":"2020-01-10 23:51:41"}}