之前,已经讲过很多Golang的东西,比如基础语法,mysql的使用,redis的使用等等,感兴趣的可以看看以前的文章,https://www.cnblogs.com/zhangweizhong/category/1275863.html,
今天就用从头写一个完整的go的示例项目吧。
本项目完全使用原生开发,没有使用任何WEB框架和ORM。虽然大家对mvc 呀,三层架构已经很了解了。但是,我还是想从头写一个完整的示例项目。这样大家有一个更深刻的了解,这样以后介绍web框架,orm框架的时候,学习起来应该会简单一点。
项目架构
下图这种架构模式相信大家应该十分清楚
Controller组合封装
Controller"基类"封装
package framework
type Controller struct {
Data interface{}
}
UserController定义了用户注册,登录和查询等简单的三个接口
package controller
import (
"net/http"
"micro-cloud/service"
"micro-cloud/utils"
"micro-cloud/framework"
)
/**
* r.PostFormValue : 可以解析 Post/PUT Content-Type=application/x-www-form-urlencoded 或 Content-Type=multipart/form-data
*/
type UserConterller struct {
}
var userService = new(service.UserService)
func (p *UserConterller) Router(router *framework.RouterHandler) {
router.Router("/register", p.register)
router.Router("/login", p.login)
router.Router("/findAll", p.findAll)
}
//POST Content-Type=application/x-www-form-urlencoded
func (p *UserConterller) register(w http.ResponseWriter, r *http.Request) {
username := r.PostFormValue("username")
password := r.PostFormValue("password")
if utils.Empty(username) || utils.Empty(password) {
microcloud.ResultFail(w, "username or password can not be empty")
return
}
id := userService.Insert(username, password)
if id <= 0 {
microcloud.ResultFail(w, "register fail")
return
}
microcloud.ResultOk(w, "register success")
}
//POST Content-Type=application/x-www-form-urlencoded
func (p *UserConterller) login(w http.ResponseWriter, r *http.Request) {
username := r.PostFormValue("username")
password := r.PostFormValue("password")
if utils.Empty(username) || utils.Empty(password) {
microcloud.ResultFail(w, "us