定義
模板就是將一組文字嵌入另一組文字裡
傳入string--最簡單的替換
package main
import (
"os"
"text/template"
)func main() }") //建立乙個模板,內容是"hello, }"
if err != nil
err = tmpl.execute(os.stdout, name) //將string與模板合成,變數name的內容會替換掉}
//合成結果放到os.stdout裡
if err != nil
}//輸出 : hello, waynehu
因為"hello, }"也是乙個字串,所以可以單獨拎出來,如下:
//這句
tmpl, err := template.new("test").parse("hello, }")
//等於下面的兩句
muban := "hello, }"
tmpl, err := template.new("test").parse(muban)
//之後的例子都用兩句的方式表達
傳入struct
模板合成那句,第2個引數是inte***ce{},所以可以傳入任何型別,現在傳入struct看看 要取得struct的值,只要使用成員名字即可,看**吧:
package main
import (
"os"
"text/template"
)type
inventory
struct
func main()
muban := "} items are made of }"
tmpl, err := template.new("test").parse(muban) //建立乙個模板
if err != nil
err = tmpl.execute(os.stdout, sweaters) //將struct與模板合成,合成結果放到os.stdout裡
if err != nil
}//輸出 : 17 items are made of wool
多模板,介紹new,name,lookup
//乙個模板可以有多種,以name來區分
muban_eng := "} items are made of }"
muban_chn := "}做了}個專案"
//建立乙個模板的名稱是china,模板的內容是muban_chn字串
tmpl, err := template.new("china")
tmpl, err = tmpl.parse(muban_chn)
//建立乙個模板的名稱是english,模板的內容是muban_eng字串
tmpl, err = tmpl.new("english")
tmpl, err = tmpl.parse(muban_eng)
//將struct與模板合成,用名字是china的模板進行合成,結果放到os.stdout裡,內容為「wool做了17個專案」
err = tmpl.executetemplate(os.stdout, "china", sweaters)
//將struct與模板合成,用名字是china的模板進行合成,結果放到os.stdout裡,內容為「17 items are made of wool」
err = tmpl.executetemplate(os.stdout, "english", sweaters)
tmpl, err = template.new("english")
fmt.println(tmpl.name()) //列印出english
tmpl, err = tmpl.new("china")
fmt.println(tmpl.name()) //列印出china
tmpl=tmpl.lookup("english")//必須要有返回,否則不生效
fmt.println(tmpl.name()) //列印出english
檔案模板,介紹parsefiles
//模板可以是一行
muban := "} items are made of }"
//也可以是多行
muban := `items number is }
there made of }
`把模板的內容發在乙個文字檔案裡,用的時候將文字檔案裡的所有內容賦值給muban這個變數即可
上面的想法可以自己實現,但其實tamplate包已經幫我們封裝好了,那就是template.parsefiles方法
假設有乙個檔案mb.txt的內容是muban變數的內容
$cat mb.txt
} items are made of }
那麼下面2行
muban := "} items are made of }"
tmpl, err := template.new("test").parse(muban) //建立乙個模板
等價於tmpl, err := template.parsefiles("mb.txt") //建立乙個模板,這裡不需要new("name")的方式,因為name自動為檔名
檔案模板,介紹parseglob
parsefiles接受乙個字串,字串的內容是乙個模板檔案的路徑(絕對路徑or相對路徑)
parseglob也差不多,是用正則的方式匹配多個檔案
假設乙個目錄裡有a.txt b.txt c.txt的話
用parsefiles需要寫3行對應3個檔案,如果有一萬個檔案呢?
而用parseglob只要寫成template.parseglob("*.txt") 即可
模板的輸出,介紹executetemplate和execute
模板下有多套模板,其中有一套模板是當前模板
可以使用name的方式檢視當前模板
err = tmpl.executetemplate(os.stdout, "english", sweaters) //指定模板名,這次為english
err = tmpl.execute(os.stdout, sweaters) //模板名省略,列印的是當前模板
模板的復用
模板裡可以套模板,以達到復用目的,用template關鍵字
muban1 := `hi, },
hi, }
`muban2 := "我是模板2,}"
muban3 := "ha我是模板3ha!"
tmpl, err := template.new("m1").parse(muban1)
tmpl.new("m2").parse(muban2)
tmpl.new("m3").parse(muban3)
err = tmpl.execute(os.stdout, nil)
完整**:
package main
import (
"os"
"text/template"
)func main() },
hi, }
` muban2 := `我是模板2,}`
muban3 := "ha我是模板3ha!"
tmpl, err := template.new("m1").parse(muban1)
if err != nil
tmpl.new("m2").parse(muban2)
if err != nil
tmpl.new("m3").parse(muban3)
if err != nil
err = tmpl.execute(os.stdout, nil)
if err != nil
}輸出的內容
hi, 我是模板2,ha我是模板3ha!,
hi, ha我是模板3ha!
模板的回車
const letter = `dear },
}it was a pleasure to see you at the wedding.
如果attended是true的話,這句是第二行}it is a shame you couldn't make it to the wedding.
如果attended是false的話,這句是第二行}
}thank you for the lovely }.
}best wishes,
josie
`解釋一下:
dear某某某的dear應該是在第一行,所以在d前面不能有回車,否則dear會跑到第2行去
所以dear要緊貼```
信件的稱唿和正文有一行空行,最好顯式的打出一行,而標準庫里的回車是包在if裡,成為正文的一部分,這樣排版容易出錯
正確的正文排版如下
如果正文就一行,要把true和false的所有內容都寫在一行
比如}true line,hello true}false line,hi false}
如果正文有多行,就等於把一行拆成多行
會發現true的最後一行和false的第一行是在同一行
}和ture的第一行在同一行
}和false的最後一行在同一行
如下}true line
hello true}false line
hi false}
關於},意思是如果gift不是為空的話,就列印整行,如果為空,就不列印
只有這樣寫法,with對應的end要寫在第2行,才會把「thank you」這句後面帶乙個回車進去,這樣寫法,就像「thank you」這句是插在正文下面的
只有這樣寫,不管有沒有「thank you」,正文和best wishes,之間始終只有1行空白
go語言的模板,text template包
模板就是將一組文字嵌入另一組文字裡 package main import os text template func main 建立乙個模板,內容是 hello,if err nil err tmpl.execute os.stdout,name 將string與模板合成,變數name的內容會替換...
go語言的模板,text template包
模板就是將一組文字嵌入另一組文字裡 package main import os text template func main 建立乙個模板,內容是 hello,if err nil err tmpl.execute os.stdout,name 將string與模板合成,變數name的內容會替換...
go語言的模板,text template包
模板就是將一組文字嵌入另一組文字裡 package main import os text template func main 建立乙個模板,內容是 hello,if err nil err tmpl.execute os.stdout,name 將string與模板合成,變數name的內容會替換...