用 go 实现一个简单的 mvc

go-simple-mvc

demo

github

从这个文档build-web-application-with-golang学习到很多。

下载

git clone https://github.com/jc91715/go-simple-mvc

安装依赖

go get github.com/astaxie/beego
go get github.com/go-sql-driver/mysql

运行

go run main.go

访问 localhost:9090

使用说明

1 添加路由

routes/web.go

a.AddRoute("/posts/:post_id([0-9]+)", map[string]string{
        "GET": "Show",//对应PostController的Show方法
    }, &controller.PostController{})

2 创建控制器

controller下创建PostController.go

package controller

//导入要用到的包

type PostController struct {
    Controller
}
func (c *PostController) Show() {//添加方法

}

3 模型

使用的beego-orm

package model

type RainlabBlogPosts struct {
    Id          int
    Title       string
    ContentHtml string
}

使用

    o := orm.NewOrm()

    post := model.RainlabBlogPosts{Id: id}

4 视图

view文件夹下

抽离出header.tplfooter.tpl

{{define "header"}}
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>go-simple-mvc</title>
    <style>
      body{
        margin:30px;

      }
    </style>
</head>
<body>
{{end}}
{{define "footer"}}
</body>
</html>
{{end}}

例子 post/show.tpl

{{define "show"}}
{{template "header"}}
<div style="text-align:center"> 
  <a href="/" >回首页</a>
</div>
<div style="width:80%;margin-left:10%"> 
  {{.}}
</div>

{{template "footer"}}
{{end}}

控制器调用视图

  s1, _ := template.ParseFiles("view/layout/header.tpl", "view/post/show.tpl", "view/layout/footer.tpl")//装载视图

  s1.ExecuteTemplate(c.Ct.ResponseWriter, "show", "string")

数据库表结构结构

CREATE TABLE `rainlab_blog_posts` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `content_html` longtext COLLATE utf8mb4_unicode_ci,
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
本作品采用《CC 协议》,转载必须注明作者和本文链接
Make everything simple instead of making difficulties as simple as possible
讨论数量: 1

go get 有像composer那样的国内镜像吗?下载太慢了,而且有些需要从被墙的golang.org下载

4年前 评论
颜⑧ 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!