golang从入门到精通,Web编程,多模块、MVC、多模板学习

golang从入门到精通,Web编程,多模块、MVC、多模板学习之前我们简单学习了golang web编程的单一功能,我们今天先简单了解一下MVC结构下的编程方法。golang从入门到精通目录结构树D:\go

之前我们简单学习了golang web编程的单一功能,我们今天先简单了解一下MVC结构下的编程方法。

golang从入门到精通,Web编程,多模块、MVC、多模板学习

golang从入门到精通

目录结构树

D:\go\src\go7\demo3>tree /F
文件夹 PATH 列表
卷序列号为 42BA-8F20
D:.
│  main.go              //主入口程序
│  main_test.go      //单元测试程序
│
├─controller          //控制器文件夹,主要放控制器程序
│  │  main.go        //控制器主程序,主要注册路由和一些公共函数和方法
│  │
│  ├─home           //控制器的分级目录,主要放分级的控制器
│  │      index.go   //控制器的分级目录下的功能实现
│  │
│  └─index           //控制器的分级目录,主要放分级的控制器
│          index.go   //控制器的分级目录下的功能实现
│
├─model             //
└─view                //视图文件夹,主要放置模板文件
    ├─base            //视图文件夹分级文件夹,主要放置被继承的模板文件和公共文件
    │      base.html//视图文件夹分级文件夹下的被继承的模板文件和公共文件
    │
    ├─home          //视图文件夹分级文件夹,主要放置继承的模板文件和视图文件
    │      index.html//视图文件夹分级文件夹下的被继承的模板文件和视图文件
    │
    └─index            //视图文件夹分级文件夹,主要放置继承的模板文件和视图文件
            index.html//视图文件夹分级文件夹下的被继承的模板文件和视图文件

主入口程序

D:\go\src\go7\demo3\main.go

package main

import (
   "go7/demo3/controller"
   "log"
   "net/http"
)

func main() {
   //设置日志显示内容
   log.SetFlags(log.Lshortfile | log.LstdFlags)
   //注册控制器
   controller.Register()
   //启动服务器
   _ = http.ListenAndServe(":80", nil)
}

单元测试程序

D:\go\src\go7\demo3\main_test.go

package main

import (
   "go7/demo3/controller/home"
   "go7/demo3/controller/index"
   "io/ioutil"
   "net/http"
   "net/http/httptest"
   "testing"
)

func TestIndex(t *testing.T) {
   handler := http.HandlerFunc(index.Index)
   app := httptest.NewServer(handler)
   defer app.Close()
   _url := app.URL + "/" + "index"
   t.Log(_url)
   response, _ := http.Get(_url)
   defer response.Body.Close()
   bytes, _ := ioutil.ReadAll(response.Body)
   t.Log(string(bytes))
}
func TestHome(t *testing.T) {
   handler := http.HandlerFunc(home.Index)
   app := httptest.NewServer(handler)
   defer app.Close()
   _url := app.URL + "/" + "home"
   t.Log(_url)
   response, _ := http.Get(_url)
   defer response.Body.Close()
   bytes, _ := ioutil.ReadAll(response.Body)
   t.Log(string(bytes))
}

控制器源码

D:\go\src\go7\demo3\controller\main.go

package controller

import (
   "go7/demo3/controller/home"
   "go7/demo3/controller/index"
   "net/http"
)

func Register() {
   //注册HandleFunc
   http.HandleFunc("/index", index.Index)
   http.HandleFunc("/home", home.Index)
}

D:\go\src\go7\demo3\controller\home\index.go

package home

import (
   "log"
   "net/http"
   "text/template"
)

func Index(w http.ResponseWriter, r *http.Request) {
   //解析模板文件
   parseFiles, err := template.ParseFiles(
      "view/home/index.html",
      "view/base/base.html",
   )
   if err != nil {
      log.Println(err.Error())
   }
   //渲染模板文件
   err = parseFiles.ExecuteTemplate(w, "home_index", map[string]interface{}{
      "user": map[string]interface{}{
         "name":    "李四",
         "age":     28,
         "address": "上海市",
      },
      "title": "demo3/controller/home/index.go",
   })
   if err != nil {
      log.Println(err.Error())
   }
}

D:\go\src\go7\demo3\controller\index\index.go

package index

import (
   "log"
   "net/http"
   "text/template"
)

func Index(w http.ResponseWriter, r *http.Request) {
   //解析模板文件
   parseFiles, err := template.ParseFiles(
      "view/index/index.html",
      "view/base/base.html",
   )
   if err != nil {
      log.Println(err.Error())
   }
   //渲染模板文件
   err = parseFiles.ExecuteTemplate(w, "index_index", map[string]interface{}{
      "user": map[string]interface{}{
         "name":    "张三",
         "age":     18,
         "address": "北京市",
      },
      "title": "demo3/controller/index/index.go",
   })
   if err != nil {
      log.Println(err.Error())
   }
}

视图源码

D:\go\src\go7\demo3\view\base\base.html

{{define "base_base"}}
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>{{block "title" .}}{{end}}</title>
    </head>
    <body>
    {{block "body" .}}
    {{end}}
    </body>
    </html>
{{end}}

D:\go\src\go7\demo3\view\home\index.html

{{define "home_index"}}
    {{template "base_base" .}}
{{end}}
{{define "title"}}
    {{.title}}
{{end}}
{{define "body"}}
    <pre>
        {{.user.name}}今年{{.user.age}}岁,居住在{{.user.address}}
    </pre>
{{end}}

D:\go\src\go7\demo3\view\index\index.html

{{define "index_index"}}
    {{template "base_base" .}}
{{end}}
{{define "title"}}
    {{.title}}
{{end}}
{{define "body"}}
    <pre>
        {{.user.name}}今年{{.user.age}}岁,居住在{{.user.address}}
    </pre>
{{end}}

如需下载源码,私信发送,共同谈论学习

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/4166.html

(0)
编程小号编程小号
上一篇 2022-12-26
下一篇 2022-12-27

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注