template
Go提供了一个html/template包,它将从文件加载HTML,并为我们插入签名
html/template包基于text/template包。使用这两个包的方法几乎完全相同,但是html/template有一些额外的安全特性(自动转译模版中插入的html代码,避免恶意攻击)
1 | package main |
Template.Execute()
第一个参数传入一个io.Writer
,只要满足Write
接口就可以,例如http.ResponseWriter
和os.Stdout
都有Write
方法
1 | package io // import "io" |
Template
值的Execute
方法的第二个参数允许你传入要插入到模板中的数据。它的类型是空接口,这意味着你可以传入任何类型的值。
action插入
要在模板中插入数据,可以向模板文本添加action(操作)。action用双花括号{{}}
表示。在双花括号中,指定要插入的数据或要模板执行的操作。每当模板遇到action时,它将计算其内容,并在action的位置将结果插入模板文本中。在一个操作中,你可以使用一个带有“dot”(点)的Execute方法来引用传递给它的数据值
if action
模板中{{if.}}
action与其对应的{{end}}
标记之间的一段只有在条件为真时才会包含
range action
在{{range.}}
action与其对应的{{end}}
标记之间的模板部分,将对数组、切片、映射或channel中收集的每个值进行重复。该部分中的任何操作也将被重复
struct action
在模版通过{{.value}}
填充结构体的值
1 | package main |
web程序响应html模版
1 | package main |
html模版
<h1>
: 一级标题。通常以大的、粗体文本显示<div>
: division元素。它本身不直接可见,但用于将页面划分为多个部分<p>
: 一段文字。我们将把每个签名作为一个单独的段落来处理<a>
: 代表“anchor”(锚)。创建一个链接
view.html
1 | <h1>Guestbook</h1> <!--页面顶部一级标题--> |
<form>
:该元素包含表单的所有其他组件- 具有
type
属性为"text"
的<input>
:用户可以在其中输入字符串的文本字段。它的name
属性将用于标记发送到服务器的数据中字段的值 (类似于映射键) - 具有
type
属性为"submit"
的<input>
:创建一个按钮,用户可以单击该按钮来提交表单的数据 POST
:当浏览器需要向服务器添加一些数据时使用,通常是因为你提交了一个包含新数据的表单GET
:当浏览器需要从服务器获取某些内容时使用,通常是因为你输入了URL或单击了链接。这可能是一个HTML页面、图像或其他资源
new.html
1 | <h1>Add a Signature</h1> <!--页面顶部一级标题--> |