当前位置: 移动技术网 > IT编程>脚本编程>Go语言 > golang实现页面静态化操作的示例代码

golang实现页面静态化操作的示例代码

2020年05月13日  | 移动技术网IT编程  | 我要评论

药用辅料网,育儿知识大全下载,陈安之演讲视频下载

什么是页面静态化:

简单的说,我们如果访问一个链接 ,服务器对应的模块会处理这个请求,转到对应的go方法,最后生成我们想要看到的数据。这其中的缺点是显而易见的:因为每次请求服务器都会进行处理,如 果有太多的高并发请求,那么就会加重应用服务器的压力,弄不好就把服务器 搞down 掉了。那么如何去避免呢?如果我们把请求后的结果保存成一个 html 文件,然后每次用户都去访问 ,这样应用服务器的压力不就减少了?

那么静态页面从哪里来呢?总不能让我们每个页面都手动处理吧?这里就牵涉到我们要讲解的内容了,静态页面生成方案… 我们需要的是自动的生成静态页面,当用户访问 ,会自动生成html文件 ,然后显示给用户。

为了路由方便我用的gin框架但是不管用在什么框架上面都是一样的

项目目录:

project

-tem

--

-main.go

main.go文件代码:

package main

import (
  "fmt"
  "net/http"
  "os"
  "path/filepath"
  "text/template"

  "github.com/gin-gonic/gin"
)

type product struct {
  id  int64 `json:"id"` //字段一定要大写不然各种问题
  name string `json:"name"`
}

//模拟从数据库查询过来的消息
var allproduct []*product = []*product{
  {1, "苹果手机"},
  {2, "苹果电脑"},
  {3, "苹果耳机"},
}
var (
  //生成的html保存目录
  htmloutpath = "./tem"
  //静态文件模版目录
  templatepath = "./tem"
)

func main() {
  r := gin.default()
  r.loadhtmlglob("tem/*")
  r.get("/index", func(c *gin.context) {
    getgeneratehtml()
    c.html(http.statusok, "", gin.h{"allproduct": allproduct})
  })
  r.get("/index2", func(c *gin.context) {
    c.html(http.statusok, "html", gin.h{})
  })
  r.run()
}

//生成静态文件的方法
func getgeneratehtml() {
  //1.获取模版
  contensttmp, err := template.parsefiles(filepath.join(templatepath, ""))
  if err != nil {
    fmt.println("获取模版文件失败")
  }
  //2.获取html生成路径
  filename := filepath.join(htmloutpath, "html")
  //4.生成静态文件
  generatestatichtml(contensttmp, filename, gin.h{"allproduct": allproduct})
}

//生成静态文件
func generatestatichtml(template *template.template, filename string, product map[string]interface{}) {
  //1.判断静态文件是否存在
  if exist(filename) {
    err := os.remove(filename)
    if err != nil {
      fmt.println("移除文件失败")
    }
  }
  //2.生成静态文件
  file, err := os.openfile(filename, os.o_create|os.o_wronly, os.modeperm)
  if err != nil {
    fmt.println("打开文件失败")
  }
  defer file.close()
  template.execute(file, &product)
}

//判断文件是否存在
func exist(filename string) bool {
  _, err := os.stat(filename)
  return err == nil || os.isexist(err)
}

tem/文件代码:

{{define ""}}
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>商品列表页</title>
</head>
<tbody>

<div><a href="#" rel="external nofollow" >商品列表页</a></div>
<table border="1">
  <thead>
  <tr>
    <th>id</th>
    <th>商品名称</th>
  </tr>
  </thead>
  <tbody>
  {{range .allproduct}}
  <tr>
    <td>{{.id}}</td>
    <td>{{.name}}</td>
  </tr>
  {{end}}
  </tbody>
</table>
</html>
{{end}}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网