From f2db13df9c7c50c3f0ea072ab820012b81212d48 Mon Sep 17 00:00:00 2001 From: john Date: Mon, 6 Aug 2018 12:39:55 +0800 Subject: [PATCH] =?UTF-8?q?gview=E5=A2=9E=E5=8A=A0=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E5=8F=98=E9=87=8F=E5=88=86=E9=9A=94=E7=AC=A6=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E6=96=B9=E6=B3=95SetDelimiters;=20bug=20fix:=20ILUUA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/os/gfile/gfile.go | 6 +++++- g/os/gview/gview.go | 29 ++++++++++++++++++--------- geg/os/gview/controller_hot_update.go | 2 +- geg/os/gview/gview.go | 6 ++++-- geg/os/gview/gview.tpl | 1 + geg/os/gview/gview_delimiters.go | 17 ++++++++++++++++ geg/os/gview/gview_delimiters.tpl | 1 + geg/os/gview/gview_hot_update.go | 2 +- geg/os/gview/test.tpl | 1 - geg/os/gview/web_hot_update.go | 2 +- geg/other/test.go | 13 ++++++++---- 11 files changed, 59 insertions(+), 21 deletions(-) create mode 100644 geg/os/gview/gview.tpl create mode 100644 geg/os/gview/gview_delimiters.go create mode 100644 geg/os/gview/gview_delimiters.tpl delete mode 100644 geg/os/gview/test.tpl diff --git a/g/os/gfile/gfile.go b/g/os/gfile/gfile.go index 3167308e0..b13b6398b 100644 --- a/g/os/gfile/gfile.go +++ b/g/os/gfile/gfile.go @@ -103,7 +103,11 @@ func IsDir(path string) bool { // 判断所给路径是否为文件 func IsFile(path string) bool { - return !IsDir(path) + s, err := os.Stat(path) + if err != nil { + return false + } + return !s.IsDir() } // 获取文件或目录信息 diff --git a/g/os/gview/gview.go b/g/os/gview/gview.go index 70562992e..6005660c0 100644 --- a/g/os/gview/gview.go +++ b/g/os/gview/gview.go @@ -4,7 +4,7 @@ // If a copy of the MIT was not distributed with this file, // You can obtain one at https://gitee.com/johng/gf. -// 视图管理 +// 视图管理. package gview import ( @@ -22,10 +22,11 @@ import ( // 视图对象 type View struct { - mu sync.RWMutex - paths *gspath.SPath // 模板查找目录(绝对路径) - funcmap map[string]interface{} // FuncMap - contents *gmap.StringStringMap // 已解析的模板文件内容 + mu sync.RWMutex + paths *gspath.SPath // 模板查找目录(绝对路径) + funcmap map[string]interface{} // FuncMap + contents *gmap.StringStringMap // 已解析的模板文件内容 + delimiters []string // 模板变量分隔符号 } // 视图表 @@ -59,10 +60,12 @@ func New(path string) *View { s := gspath.New() s.Set(path) view := &View { - paths : s, - funcmap : make(map[string]interface{}), - contents : gmap.NewStringStringMap(), + paths : s, + funcmap : make(map[string]interface{}), + contents : gmap.NewStringStringMap(), + delimiters : make([]string, 2), } + view.SetDelimiters("{{", "}}") view.BindFunc("include", view.funcInclude) return view } @@ -95,7 +98,7 @@ func (view *View) Parse(file string, params map[string]interface{}) ([]byte, err view.mu.RLock() defer view.mu.RUnlock() buffer := bytes.NewBuffer(nil) - if tpl, err := template.New(path).Funcs(view.funcmap).Parse(content); err != nil { + if tpl, err := template.New(path).Delims(view.delimiters[0], view.delimiters[1]).Funcs(view.funcmap).Parse(content); err != nil { return nil, err } else { if err := tpl.Execute(buffer, params); err != nil { @@ -111,7 +114,7 @@ func (view *View) ParseContent(content string, params map[string]interface{}) ([ defer view.mu.RUnlock() name := gconv.String(ghash.BKDRHash64([]byte(content))) buffer := bytes.NewBuffer(nil) - if tpl, err := template.New(name).Funcs(view.funcmap).Parse(content); err != nil { + if tpl, err := template.New(name).Delims(view.delimiters[0], view.delimiters[1]).Funcs(view.funcmap).Parse(content); err != nil { return nil, err } else { if err := tpl.Execute(buffer, params); err != nil { @@ -121,6 +124,12 @@ func (view *View) ParseContent(content string, params map[string]interface{}) ([ return buffer.Bytes(), nil } +// 设置模板变量解析分隔符号 +func (view *View) SetDelimiters(left, right string) { + view.delimiters[0] = left + view.delimiters[1] = right +} + // 绑定自定义函数,该函数是全局有效,即调用之后每个线程都会生效,因此有并发安全控制 func (view *View) BindFunc(name string, function interface{}) { view.mu.Lock() diff --git a/geg/os/gview/controller_hot_update.go b/geg/os/gview/controller_hot_update.go index 536db26d6..bf7fab13c 100644 --- a/geg/os/gview/controller_hot_update.go +++ b/geg/os/gview/controller_hot_update.go @@ -17,7 +17,7 @@ type Controller struct { // 测试模板热更新机制 func (c *Controller) Test() { - b, _ := c.View.Parse("test.tpl") + b, _ := c.View.Parse("gview.tpl") c.Response.Write(b) } diff --git a/geg/os/gview/gview.go b/geg/os/gview/gview.go index 5149af00d..d4479acfb 100644 --- a/geg/os/gview/gview.go +++ b/geg/os/gview/gview.go @@ -8,7 +8,9 @@ import ( func main() { v := g.View() - b, err := v.Parse("test.tpl", nil) + b, err := v.Parse("gview.tpl", map[string]interface{} { + "k" : "v", + }) fmt.Println(err) - fmt.Println(b) + fmt.Println(string(b)) } \ No newline at end of file diff --git a/geg/os/gview/gview.tpl b/geg/os/gview/gview.tpl new file mode 100644 index 000000000..26d34e666 --- /dev/null +++ b/geg/os/gview/gview.tpl @@ -0,0 +1 @@ +test.tpl content, vars: {{.}} \ No newline at end of file diff --git a/geg/os/gview/gview_delimiters.go b/geg/os/gview/gview_delimiters.go new file mode 100644 index 000000000..c5ebd0366 --- /dev/null +++ b/geg/os/gview/gview_delimiters.go @@ -0,0 +1,17 @@ +package main + + +import ( + "fmt" + "gitee.com/johng/gf/g" +) + +func main() { + v := g.View() + v.SetDelimiters("${", "}") + b, err := v.Parse("gview_delimiters.tpl", map[string]interface{} { + "k" : "v", + }) + fmt.Println(err) + fmt.Println(string(b)) +} \ No newline at end of file diff --git a/geg/os/gview/gview_delimiters.tpl b/geg/os/gview/gview_delimiters.tpl new file mode 100644 index 000000000..d5e4b51e6 --- /dev/null +++ b/geg/os/gview/gview_delimiters.tpl @@ -0,0 +1 @@ +test.tpl content, vars: ${.} \ No newline at end of file diff --git a/geg/os/gview/gview_hot_update.go b/geg/os/gview/gview_hot_update.go index 74b142716..0868bf736 100644 --- a/geg/os/gview/gview_hot_update.go +++ b/geg/os/gview/gview_hot_update.go @@ -12,7 +12,7 @@ func main() { v := g.View() v.SetPath(`D:\Workspace\Go\GOPATH\src\gitee.com\johng\gf\geg\os\gview`) gtime.SetInterval(time.Second, func() bool { - b, _ := v.Parse("test.tpl", nil) + b, _ := v.Parse("gview.tpl", nil) fmt.Println(string(b)) return true }) diff --git a/geg/os/gview/test.tpl b/geg/os/gview/test.tpl deleted file mode 100644 index f83d6f176..000000000 --- a/geg/os/gview/test.tpl +++ /dev/null @@ -1 +0,0 @@ -test.tpl content2 \ No newline at end of file diff --git a/geg/os/gview/web_hot_update.go b/geg/os/gview/web_hot_update.go index 46624cee9..00b0da64e 100644 --- a/geg/os/gview/web_hot_update.go +++ b/geg/os/gview/web_hot_update.go @@ -10,7 +10,7 @@ func main() { s := g.Server() s.BindHandler("/", func(r *ghttp.Request) { g.View().SetPath(`D:\Workspace\Go\GOPATH\src\gitee.com\johng\gf\geg\os\gview`) - b, _ := g.View().Parse("test.tpl", nil) + b, _ := g.View().Parse("gview.tpl", nil) r.Response.Write(b) }) s.Run() diff --git a/geg/other/test.go b/geg/other/test.go index 48f757886..cb980fd94 100644 --- a/geg/other/test.go +++ b/geg/other/test.go @@ -1,10 +1,15 @@ package main import ( - "fmt" - "math" + "gitee.com/johng/gf/g/os/gfile" ) func main() { - fmt.Println(int(math.MaxInt64)) -} \ No newline at end of file + path := "/home/john/Documents/temp" + flags1 := gfile.IsFile(path) + if flags1 == true { + println("有") + } else { + println("无") + } +}