你通过它可以实现一个简单的 restful 工程或者是一个 web 应用。 如果你不想使用 mysql 数据库,可以自己实现 Auth 中间件与 session。你可以用自己的 DAO,或者你喜欢的。
-
执行命令
mkdir demo && cd demo go get gopkg.in/alecthomas/kingpin.v2 go get github.com/yang-f/beauty
-
将$GOPATH/bin 加入到$PATH 环境变量
-
执行命令
beauty
-
这时显示如下
usage: beauty [<flags>] <command> [<args> ...] A command-line tools of beauty. Flags: --help Show context-sensitive help (also try --help-long and --help-man). Commands: help [<command>...] Show help. demo Demo of web server. generate <name> Generate a new app.
-
测试 beauty
beauty demo
-
这时 terminal 显示
2017/05/04 16:21:05 start server on port :8080
-
通过浏览器访问 127.0.0.1:8080
{"description":"this is json"}
-
访问 127.0.0.1:8080/demo1
{"description":"this is json"}
-
恭喜你,运行成功。
-
生成 app
beauty generate app的名字
-
生成的 app 目录列表
GOPATH/src/yourAppName ├── controllers │ ├── adminController.go │ └── controller_test.go ├── decorates | └── http.go ├── main.go ├── models ├── tpl └── utils
-
关于路由
- 例子
r := router.New() r.GET("/", controllers.Config().ContentJSON()) r.GET("/demo1", controllers.Config().ContentJSON().Verify())
-
token 生成
tokenString, err := token.Generate(fmt.Sprintf("%v|%v", user_id, user_pass))
-
小例子
package main import ( "net/http" "log" "github.com/yang-f/beauty/consts/contenttype" "github.com/yang-f/beauty/router" "github.com/yang-f/beauty/settings" "github.com/yang-f/beauty/controllers" "github.com/yang-f/beauty/decorates" ) func main() { log.Printf("start server on port %s", settings.Listen) settings.Listen = ":8080"//服务运行端口 settings.Domain = "yourdomain.com"//部署服务的域名 settings.DefaultOrigin = "http://defaultorigin.com"//默认的请求来源 settings.HmacSampleSecret = "whatever"//令牌生产需要的字符串 r := router.New() r.GET("/", controllers.Config().ContentJSON()) r.GET("/demo1", controllers.Config().ContentJSON().Verify()) log.Fatal(http.ListenAndServe(settings.Listen, r)) }
-
参数校验
- 这是一个统一的参数校验,主要是针对 SQL 注入,有了它,或许就不用一个一个参数做校验了。
- 使用方式
r.GET("/", controllers.Config().ContentJSON().Verify())//需要验证用户信息
-
令牌
settings.HmacSampleSecret = "whatever" token, err := token.Generate(origin) origin, err := token.Valid(token)
-
cors 跨域
- 静态文件
router.PathPrefix("/static/").Handler(http.StripPrefix("/static/", decorates.CorsHeader2(http.FileServer(http.Dir("/your/static/path")))))
- 其他:
- 默认是支持跨域操作的
-
错误处理以及 http 状态管理
func XxxxController() decorates.Handler{ return func (w http.ResponseWriter, r *http.Request) *models.APPError { xxx,err := someOperation() if err != nil{ return &models.APPError {err, Message, Code, Status} } ... return nil } }
-
工具
- Response
- Rand
- MD5
- Post
-
测试
- go test -v -bench=".*"
- go test -v -short $(go list ./... | grep -v /vendor/)
- ...
-
sql
create database yourdatabase; use yourdatabase; create table if not exists user ( user_id int primary key not null auto_increment, user_name varchar(64), user_pass varchar(64), user_mobile varchar(32), user_type enum('user', 'admin', 'test') not null, add_time timestamp not null default CURRENT_TIMESTAMP ); insert into user (user_name, user_pass) values('admin', 'admin');
-
你需要编辑一个配置文件'/srv/filestore/settings/latest.json' 格式如下:
{ "mysql_host":"127.0.0.1:3306", "mysql_user":"root", "mysql_pass":"root", "mysql_database":"yourdatabase" }
- Fork 代码!
- 创建新的分支:
git checkout -b my-new-feature
- 提交更改:
git commit -m 'Add some feature'
- push 到分支:
git push origin my-new-feature
- 发起一个 pull request :D
- 命令行工具
- 继续提升文档质量
- 权限控制
- 增加测试覆盖率
- 错误处理