實現最簡單的模板替換
直接上程式碼
package main
import (
"bytes"
"fmt"
"io"
"strings"
)
type ParseState int
const (
PS_TEXT ParseState = 1 + iota
PS_FIELD
)
type StrMap map[string]string
func AppendField(out io.Writer, key string, fields StrMap) {
if v, ok := fields[key]; ok {
io.WriteString(out, v)
}
}
func Render(tmpl string, fields StrMap) string {
var out = &bytes.Buffer{}
var field = &bytes.Buffer{}
r := strings.NewReader(tmpl)
var ps = PS_TEXT
for {
c, err := r.ReadByte()
if err != nil {
break
}
switch ps {
case PS_TEXT:
if c != '{' {
out.WriteByte(c)
} else {
ps = PS_FIELD
}
case PS_FIELD:
if c != '}' && ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
field.WriteByte(c)
} else {
ps = PS_TEXT
var key = field.String()
AppendField(out, key, fields)
field.Reset()
}
}
}
return out.String()
}
func main() {
var tmpl = "name = {name} age={age} test empty={} test bad {{ }}}"
fields := make(StrMap)
fields["name"] = "John"
fields["age"] = "15"
fmt.Println(Render(tmpl, fields))
// result
// name = John age=15 test empty= test bad }}}
}
相關文章
- javascript的簡單模板替換JavaScript
- 使用rails實現最簡單的CRUDAI
- 02 #### Flask模板的語法+模板的渲染(本質:替換)Flask
- vim下多行查詢替換簡單命令
- c#實現最簡單的socket通訊C#
- 如何快速替換SOLIDWORKS工程圖模板Solid
- 前端資料渲染及mustache模板引擎的簡單實現前端
- vxe-form table 表單實現簡歷模板ORM
- 60行程式碼實現簡單模板語法行程
- Laravel 使用者認證最簡單的實現 比 Jetstream 要簡單很多Laravel
- 蘋果IP:如何換IP?換IP最簡單的方法分享蘋果
- Swift 中單例模式的替換Swift單例模式
- 用最簡單的方法實現原生 JS 放大鏡特效JS特效
- 使用PHPWord對Word檔案做模板替換PHP
- canvas實現動態替換人物的背景顏色Canvas
- KOA的簡易模板引擎實現方式
- 簡單實現一個全面屏切換效果
- 使用ABAP實現一個最簡單的區塊鏈原型區塊鏈原型
- 簡單介紹Idea使用正規表示式批量替換字串的方法Idea字串
- ArrayList的簡單實現
- 實現簡單的BitMap
- AOP的簡單實現
- 簡單的 HashMap 實現HashMap
- 簡單實用的JDK版本切換JDK
- Mellanox交換機最簡單的配置一分四
- php+nginx實現最簡單的遠端呼叫rpc(微服務)PHPNginxRPC微服務
- 最簡單的C實現控制檯掃雷1+1=2
- LRU快取替換策略及C#實現快取C#
- 萌新如何用Python實現人臉替換?Python
- 梯度下降法實現最簡單線性迴歸問題python實現梯度Python
- 【LeetCode】424. 替換後的最長重複字元LeetCode字元
- 微服務簡單實現最終一致性微服務
- WinForm使用DataGridView實現類似Excel表格的查詢替換ORMViewExcel
- websocket+node實現一個最簡單的即時通訊功能Web
- 這可能是實現高斯模糊(毛玻璃)最簡單的庫了
- [Linux]簡單的shell實現Linux
- java實現簡單的JDBCJavaJDBC
- 簡單的實現vue原理Vue