golang基础-模板渲染(终端、浏览器)、渲染输出文件、自定义io.Writer渲染
来源:互联网 发布:linux root用户 编辑:程序博客网 时间:2024/05/23 12:16
- 模板渲染终端
- 模板渲染浏览器输出
- 模板渲染存储文件
- 自定义ioWriter渲染
模板渲染终端
1)替换 {{.字段名}}
demo.go
package mainimport ( "fmt" "os" "text/template")type Person struct { Name string age string}func main() { t, err := template.ParseFiles("e:/golang/go_pro/src/safly/index.html") if err != nil { fmt.Println("parse file err:", err) return } p := Person{Name: "Mary", age: "31"} if err := t.Execute(os.Stdout, p); err != nil { fmt.Println("There was an error:", err.Error()) }}
index.html
<html><head> <title> </title></head><body> <p> <!--p代表当前对象--> hello,{{.Name}} {{.}} </p></body></html>
然后在终端就可以渲染输出如下:
PS E:\golang\go_pro\src\safly> go run demo.go<html><head> <title> </title></head><body> <p> <!--p代表当前对象--> hello,Mary {Mary 31} </p></body></html>PS E:\golang\go_pro\src\safly>
模板渲染浏览器输出
index.html保持不变
package mainimport ( "fmt" "html/template" // "io" "net/http")var myTemplate *template.Templatetype Person struct { Name string age string}func userInfo(w http.ResponseWriter,r *http.Request) { p := Person{Name:"safly",age:"30"} myTemplate.Execute(w,p)}func initTemplate(fileName string) (err error){ myTemplate,err = template.ParseFiles(fileName) if err != nil{ fmt.Println("parse file err:",err) return } return}/*func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) { DefaultServeMux.HandleFunc(pattern, handler)}*/func main() { initTemplate("e:/golang/go_pro/src/safly/index.html") http.HandleFunc("/user/info", userInfo) err := http.ListenAndServe("0.0.0.0:8880", nil) if err != nil { fmt.Println("http listen failed") }}
模板渲染存储文件
package mainimport ( "os" "fmt" "html/template" // "io" "net/http")var myTemplate *template.Templatetype Person struct { Name string age string}func userInfo(w http.ResponseWriter,r *http.Request) { p := Person{Name:"safly",age:"30"} myTemplate.Execute(os.Stdout,p) file,err := os.OpenFile("demo.dat", os.O_CREATE|os.O_WRONLY, 0755) if err != nil { fmt.Println("open failed err:", err) return } myTemplate.Execute(file,p)}func initTemplate(fileName string) (err error){ myTemplate,err = template.ParseFiles(fileName) if err != nil{ fmt.Println("parse file err:",err) return } return}/*func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) { DefaultServeMux.HandleFunc(pattern, handler)}*/func main() { initTemplate("e:/golang/go_pro/src/safly/index.html") http.HandleFunc("/user/info", userInfo) err := http.ListenAndServe("0.0.0.0:8880", nil) if err != nil { fmt.Println("http listen failed") }}
然后demo.dat就被渲染输出内容了:
自定义io.Writer渲染
我们看下myTemplate.Execute源码
func (t *Template) Execute(wr io.Writer, data interface{}) error { if err := t.escape(); err != nil { return err } return t.text.Execute(wr, data)}
type Writer interface { Write(p []byte) (n int, err error)}
所以我们实现Writer接口方法Write就可以自定义了
package mainimport ( // "os" "fmt" "html/template" "io" "net/http")var myTemplate *template.Templatetype Person struct { Name string age string}type Result struct { output string}/*自定义实现接口type Writer interface { Write(p []byte) (n int, err error)}*/func (p *Result) Write(b []byte) (n int, err error) { fmt.Println("called by template") p.output += string(b) return len(b), nil}/*func WriteString(w Writer, s string) (n int, err error) { if sw, ok := w.(stringWriter); ok { return sw.WriteString(s) } return w.Write([]byte(s))}*/func userInfo(w http.ResponseWriter,r *http.Request) { p := Person{Name:"safly",age:"30"} resultWriter := &Result{} io.WriteString(resultWriter, "hello world") myTemplate.Execute(resultWriter,p) fmt.Println("render data:",resultWriter.output)}func initTemplate(fileName string) (err error){ myTemplate,err = template.ParseFiles(fileName) if err != nil{ fmt.Println("parse file err:",err) return } return}/*func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) { DefaultServeMux.HandleFunc(pattern, handler)}*/func main() { initTemplate("e:/golang/go_pro/src/safly/index.html") http.HandleFunc("/user/info", userInfo) err := http.ListenAndServe("0.0.0.0:8880", nil) if err != nil { fmt.Println("http listen failed") }}
我们在浏览器中输入http://localhost:8880/user/info
然后在终端就会渲染出如下内容:
PS E:\golang\go_pro\src\safly> go run demo.gocalled by templatecalled by templatecalled by templatecalled by templatecalled by templatecalled by templaterender data: hello world<html><head> <title> </title></head><body> <p> hello,safly {safly 30} </p></body></html>
阅读全文
0 0
- golang基础-模板渲染(终端、浏览器)、渲染输出文件、自定义io.Writer渲染
- golang基础-模板if判断、传(map_arr切片)数据渲染浏览器
- 杂记(浏览器渲染)
- 浏览器渲染
- 浏览器渲染
- 渲染模板
- 模板 渲染
- 渲染模板
- 渲染
- 渲染
- 渲染
- 渲染
- 从基础做起--浏览器渲染
- TP5 自定义模板路径 渲染完整模板
- 浏览器内核(渲染引擎)
- golang http 编程-2(模版渲染)
- (3)基础学习:渲染
- Vue基础(条件渲染)
- 怎么给TFS添加新用户,并授予某项目权限
- Two Sum
- LWC 58:724. Find Pivot Index
- 原来这些网站功能这么强?做梦都没想到那些软件都不是他的对手!
- Win7系统Visual Studio下的armadillo环境配置
- golang基础-模板渲染(终端、浏览器)、渲染输出文件、自定义io.Writer渲染
- 整理烂笔记本的笔记
- 关于项目中图片缓存的问题
- android中通过代码实现文件权限修改
- 程序员25部iPhoneX求婚,告诉你有多豪
- faster rcnn在自己的数据集上训练
- NYOJ G : 你说啥,又让我做A+B?
- iOS开发-NSOperation和NSOperationQueue的使用
- 评分卡模型剖析之一(woe、IV、ROC、信息熵)