實現最簡單的模板替換
直接上程式碼
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
- 【原創】簡單替換加密加密
- 實現一個簡單的模板引擎
- C++的Stack模板的簡單實現C++
- 使用rails實現最簡單的CRUDAI
- 資料庫的最簡單實現資料庫
- 關於.net實現網站模板機制(非標籤替換)網站
- Java實現最簡單的RPC框架JavaRPC框架
- vim下多行查詢替換簡單命令
- tensorflowrnn最簡單實現程式碼RNN
- c#實現最簡單的socket通訊C#
- 最簡單的web伺服器實現(一)Web伺服器
- 最簡單的LRU演算法java實現演算法Java
- UICollectionView(二)實現一個最簡單的UICollectionViewUIView
- 如何最簡單的實現分散式快取分散式快取
- 前端資料渲染及mustache模板引擎的簡單實現前端
- 如何快速替換SOLIDWORKS工程圖模板Solid
- PHP實現最簡單的聊天室應用PHP
- 自己實現一個最簡單的資料庫資料庫
- 蘋果IP:如何換IP?換IP最簡單的方法分享蘋果
- 60行程式碼實現簡單模板語法行程
- Laravel 使用者認證最簡單的實現 比 Jetstream 要簡單很多Laravel
- 用最簡單的方法實現原生 JS 放大鏡特效JS特效
- 原生JS實現最簡單的圖片懶載入JS
- 原生 JS 實現最簡單的圖片懶載入JS
- 最簡單實現跨域的方法:用 Nginx 反向代理跨域Nginx
- 最簡單實現跨域的方法:使用nginx反向代理跨域Nginx
- Swift 中單例模式的替換Swift單例模式
- 使用PHPWord對Word檔案做模板替換PHP
- RH9下最簡單的WebMail的實現方案(轉)WebAI
- KOA的簡易模板引擎實現方式
- canvas實現動態替換人物的背景顏色Canvas
- WPS中實現文件特定字元的字型替換字元
- Nginx實現對響應體內容的替換Nginx
- JQuery實現簡單美觀的圖片切換效果jQuery
- 簡單實現一個全面屏切換效果
- 簡單使用AutoMapper實現DTO轉換APP
- jQuery實現的將指定元素中的內容替換jQuery