1 回答
TA贡献1831条经验 获得超9个赞
您可以使用Go 标准库中的html/template包来执行此操作。
这里的基本流程是:
编写模板(go/HTML模板语言)
阅读模板(使用
template.ParseFiles
或类似)监听请求
将相关请求中的信息传递到您的模板(使用
ExecuteTemplate
或类似)
您可以将结构传递给ExecuteTemplate
,然后可以在您定义的模板中访问该结构(请参见下面的示例)。例如,如果您的结构有一个名为 的字段Name
,那么您可以使用 访问模板中的此信息{{ .Name }}
。
这是一个示例:
主要去:
包主
import (
"log"
"encoding/json"
"html/template"
"net/http"
)
var tpl *template.Template
func init() {
// Read your template(s) into the program
tpl = template.Must(template.ParseFiles("index.gohtml"))
}
func main() {
// Set up routes
http.HandleFunc("/endpoint", EndpointHandler)
http.ListenAndServe(":8080", nil)
}
// define the expected structure of payloads
type Payload struct {
Name string `json:"name"`
Hobby string `json:"hobby"`
}
func EndpointHandler(w http.ResponseWriter, r *http.Request) {
// Read the body from the request into a Payload struct
var payload Payload
err := json.NewDecoder(r.Body).Decode(&payload)
if err != nil {
log.Fatal(err)
}
// Pass payload as the data to give to index.gohtml and write to your ResponseWriter
w.Header().Set("Content-Type", "text/html")
tpl.ExecuteTemplate(w, "index.gohtml", payload)
}
索引.gohtml:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<div>
<span>Your name is</span><span>{{ .Name }}</span>
</div>
<div>
<span>Your hobby is</span><span>{{ .Hobby }}</span>
</div>
</body>
</html>
样本:
有效载荷:
{
"name": "Ahmed",
"hobby": "devving"
}
回复:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<div>
<span>Your name is</span>
<span>Ahmed</span>
</div>
<div>
<span>Your hobby is</span>
<span>devving</span>
</div>
</body>
</html>
请注意,这是非常脆弱的,因此您绝对应该添加更好的错误和边缘情况处理,但希望这是一个有用的起点。
- 1 回答
- 0 关注
- 152 浏览
添加回答
举报