Golang Parse All Files In Directory Into Templates

在用 gin 寫伺服器的時候,我發現模板並不會被 go build 打包進執行檔裡面,所以在執行的時候就找不到檔案,當然這個問題可以用字串的形式直接把模板放進 golang 原始碼裡面,但是這樣程式碼一複雜就會不好用,這時候就可以用 golang 的 embed 函式庫把檔案「嵌入」到原始碼裡面。但是問題又來了,嵌入了之後要怎麼把字串變成模板物件呢? Embed embed 套件是 1.16 新出的功能,所以如果想用的話記得要更新 go 到 1.16 以上 embed 嵌入檔案的方式是透過特殊格式的註解宣告,直接看官方範例: package main import ( "embed" ) //go:embed hello.txt var s string //go:embed hello.txt var b []byte //go:embed hello.txt var f embed.FS func main() { print(s) print(string(b)) data, _ := f.ReadFile("hello.txt") print(string(data)) } 可以看到,embed 可以把檔案讀成三種格式 string、[]byte、embed.FS,前兩者只能讀「一個」檔案,如果你只用這兩個的話引入時要用 _ "embed"。embed.FS 除了可以嵌入多個檔案之外,因為實做了 fs.FS 所以可以使用當作一個檔案系統操作。 Tmeplate No Recursive 最簡單的方法,你可以直接使用 // go:embed view/* var f embed....

2021-July-30 · 2 分鐘 · simbafs