diff --git a/g/container/gmap/int_bool_map.go b/g/container/gmap/int_bool_map.go index f586afddf..560e42039 100644 --- a/g/container/gmap/int_bool_map.go +++ b/g/container/gmap/int_bool_map.go @@ -23,14 +23,14 @@ func NewIntBoolMap() *IntBoolMap { } // 哈希表克隆 -func (this *IntBoolMap) Clone() *map[int]bool { +func (this *IntBoolMap) Clone() map[int]bool { m := make(map[int]bool) this.mu.RLock() for k, v := range this.m { m[k] = v } this.mu.RUnlock() - return &m + return m } // 给定回调函数对原始内容进行遍历,回调函数返回true表示继续遍历,否则停止遍历 diff --git a/g/container/gmap/int_int_map.go b/g/container/gmap/int_int_map.go index 7fd5fc3ce..66dd4e2ae 100644 --- a/g/container/gmap/int_int_map.go +++ b/g/container/gmap/int_int_map.go @@ -34,14 +34,14 @@ func (this *IntIntMap) Iterator(f func (k int, v int) bool) { } // 哈希表克隆 -func (this *IntIntMap) Clone() *map[int]int { +func (this *IntIntMap) Clone() map[int]int { m := make(map[int]int) this.mu.RLock() for k, v := range this.m { m[k] = v } this.mu.RUnlock() - return &m + return m } // 设置键值对 diff --git a/g/container/gmap/int_interface_map.go b/g/container/gmap/int_interface_map.go index f7bc45ab9..cce400cf4 100644 --- a/g/container/gmap/int_interface_map.go +++ b/g/container/gmap/int_interface_map.go @@ -34,14 +34,14 @@ func (this *IntInterfaceMap) Iterator(f func (k int, v interface{}) bool) { } // 哈希表克隆 -func (this *IntInterfaceMap) Clone() *map[int]interface{} { +func (this *IntInterfaceMap) Clone() map[int]interface{} { m := make(map[int]interface{}) this.mu.RLock() for k, v := range this.m { m[k] = v } this.mu.RUnlock() - return &m + return m } // 设置键值对 diff --git a/g/container/gmap/int_string_map.go b/g/container/gmap/int_string_map.go index 926f990a5..5a91c9792 100644 --- a/g/container/gmap/int_string_map.go +++ b/g/container/gmap/int_string_map.go @@ -34,14 +34,14 @@ func (this *IntStringMap) Iterator(f func (k int, v string) bool) { } // 哈希表克隆 -func (this *IntStringMap) Clone() *map[int]string { +func (this *IntStringMap) Clone() map[int]string { m := make(map[int]string) this.mu.RLock() for k, v := range this.m { m[k] = v } this.mu.RUnlock() - return &m + return m } // 设置键值对 diff --git a/g/container/gmap/interface_interface_map.go b/g/container/gmap/interface_interface_map.go index 16966a01d..0b37c3d48 100644 --- a/g/container/gmap/interface_interface_map.go +++ b/g/container/gmap/interface_interface_map.go @@ -34,14 +34,14 @@ func (this *InterfaceInterfaceMap) Iterator(f func (k interface{}, v interface{} } // 哈希表克隆 -func (this *InterfaceInterfaceMap) Clone() *map[interface{}]interface{} { +func (this *InterfaceInterfaceMap) Clone() map[interface{}]interface{} { m := make(map[interface{}]interface{}) this.mu.RLock() for k, v := range this.m { m[k] = v } this.mu.RUnlock() - return &m + return m } // 设置键值对 diff --git a/g/container/gmap/string_bool_map.go b/g/container/gmap/string_bool_map.go index 50efb3e7d..b92f53c3f 100644 --- a/g/container/gmap/string_bool_map.go +++ b/g/container/gmap/string_bool_map.go @@ -34,14 +34,14 @@ func (this *StringBoolMap) Iterator(f func (k string, v bool) bool) { } // 哈希表克隆 -func (this *StringBoolMap) Clone() *map[string]bool { +func (this *StringBoolMap) Clone() map[string]bool { m := make(map[string]bool) this.mu.RLock() for k, v := range this.m { m[k] = v } this.mu.RUnlock() - return &m + return m } // 设置键值对 diff --git a/g/container/gmap/string_int_map.go b/g/container/gmap/string_int_map.go index d333470a5..ccf8f0011 100644 --- a/g/container/gmap/string_int_map.go +++ b/g/container/gmap/string_int_map.go @@ -34,14 +34,14 @@ func (this *StringIntMap) Iterator(f func (k string, v int) bool) { } // 哈希表克隆 -func (this *StringIntMap) Clone() *map[string]int { +func (this *StringIntMap) Clone() map[string]int { m := make(map[string]int) this.mu.RLock() for k, v := range this.m { m[k] = v } this.mu.RUnlock() - return &m + return m } // 设置键值对 diff --git a/g/container/gmap/string_interface_map.go b/g/container/gmap/string_interface_map.go index 9cb183998..a6c9bc905 100644 --- a/g/container/gmap/string_interface_map.go +++ b/g/container/gmap/string_interface_map.go @@ -34,14 +34,14 @@ func (this *StringInterfaceMap) Iterator(f func (k string, v interface{}) bool) } // 哈希表克隆 -func (this *StringInterfaceMap) Clone() *map[string]interface{} { +func (this *StringInterfaceMap) Clone() map[string]interface{} { m := make(map[string]interface{}) this.mu.RLock() for k, v := range this.m { m[k] = v } this.mu.RUnlock() - return &m + return m } // 设置键值对 diff --git a/g/container/gmap/string_string_map.go b/g/container/gmap/string_string_map.go index 812f3e333..3d4562b95 100644 --- a/g/container/gmap/string_string_map.go +++ b/g/container/gmap/string_string_map.go @@ -34,14 +34,14 @@ func (this *StringStringMap) Iterator(f func (k string, v string) bool) { } // 哈希表克隆 -func (this *StringStringMap) Clone() *map[string]string { +func (this *StringStringMap) Clone() map[string]string { m := make(map[string]string) this.mu.RLock() for k, v := range this.m { m[k] = v } this.mu.RUnlock() - return &m + return m } // 设置键值对 diff --git a/g/container/gmap/uint_interface_map.go b/g/container/gmap/uint_interface_map.go index 3ff1517de..f7c2ce063 100644 --- a/g/container/gmap/uint_interface_map.go +++ b/g/container/gmap/uint_interface_map.go @@ -33,14 +33,14 @@ func (this *UintInterfaceMap) Iterator(f func (k uint, v interface{}) bool) { } // 哈希表克隆 -func (this *UintInterfaceMap) Clone() *map[uint]interface{} { +func (this *UintInterfaceMap) Clone() map[uint]interface{} { m := make(map[uint]interface{}) this.mu.RLock() for k, v := range this.m { m[k] = v } this.mu.RUnlock() - return &m + return m } // 设置键值对 diff --git a/g/frame/gmvc/view.go b/g/frame/gmvc/view.go index 233ebd23d..ef9ab647b 100644 --- a/g/frame/gmvc/view.go +++ b/g/frame/gmvc/view.go @@ -59,7 +59,7 @@ func (view *View) BindFunc(name string, function interface{}){ func (view *View) Parse(file string) ([]byte, error) { view.mu.RLock() defer view.mu.RUnlock() - buffer, err := view.view.Parse(file, view.data, view.fmap) + buffer, err := view.response.ParseTpl(file, view.data, view.fmap) return buffer, err } @@ -67,7 +67,7 @@ func (view *View) Parse(file string) ([]byte, error) { func (view *View) ParseContent(content string) ([]byte, error) { view.mu.RLock() defer view.mu.RUnlock() - buffer, err := view.view.ParseContent(content, view.data, view.fmap) + buffer, err := view.response.ParseTplContent(content, view.data, view.fmap) return buffer, err } diff --git a/g/net/ghttp/ghttp_response_view.go b/g/net/ghttp/ghttp_response_view.go index 98975d2b0..2d9cef918 100644 --- a/g/net/ghttp/ghttp_response_view.go +++ b/g/net/ghttp/ghttp_response_view.go @@ -13,16 +13,12 @@ import ( ) // 展示模板,可以给定模板参数,及临时的自定义模板函数 -func (r *Response) Template(tpl string, params map[string]interface{}, funcmap...map[string]interface{}) error { +func (r *Response) Tpl(tpl string, params map[string]interface{}, funcmap...map[string]interface{}) error { fmap := make(gview.FuncMap) if len(funcmap) > 0 { fmap = funcmap[0] } - // 内置函数 - fmap["get"] = r.funcGet - fmap["post"] = r.funcPost - fmap["request"] = r.funcRequest - if b, err := gins.View().Parse(tpl, params, fmap); err != nil { + if b, err := r.ParseTpl(tpl, params, fmap); err != nil { r.Write("Tpl Parsing Error: " + err.Error()) return err } else { @@ -31,6 +27,54 @@ func (r *Response) Template(tpl string, params map[string]interface{}, funcmap.. return nil } +// 展示模板内容,可以给定模板参数,及临时的自定义模板函数 +func (r *Response) TplContent(content string, params map[string]interface{}, funcmap...map[string]interface{}) error { + fmap := make(gview.FuncMap) + if len(funcmap) > 0 { + fmap = funcmap[0] + } + if b, err := r.ParseTplContent(content, params, fmap); err != nil { + r.Write("Tpl Parsing Error: " + err.Error()) + return err + } else { + r.Write(b) + } + return nil +} + +// 解析模板文件,并返回模板内容 +func (r *Response) ParseTpl(tpl string, params map[string]interface{}, funcmap...map[string]interface{}) ([]byte, error) { + fmap := make(gview.FuncMap) + if len(funcmap) > 0 { + fmap = funcmap[0] + } + return gins.View().Parse(tpl, r.buildInParams(params), r.buildInfuncs(fmap)) +} + +// 解析并返回模板内容 +func (r *Response) ParseTplContent(content string, params map[string]interface{}, funcmap...map[string]interface{}) ([]byte, error) { + fmap := make(gview.FuncMap) + if len(funcmap) > 0 { + fmap = funcmap[0] + } + return gins.View().ParseContent(content, r.buildInParams(params), r.buildInfuncs(fmap)) +} + +// 内置变量 +func (r *Response) buildInParams(params map[string]interface{}) map[string]interface{} { + params["Cookie"] = r.request.Cookie.Map() + params["Session"] = r.request.Session.Data() + return params +} + +// 内置函数 +func (r *Response) buildInfuncs(funcmap map[string]interface{}) map[string]interface{} { + funcmap["get"] = r.funcGet + funcmap["post"] = r.funcPost + funcmap["request"] = r.funcRequest + return funcmap +} + // 模板内置函数: get func (r *Response) funcGet(key string, def...string) gview.HTML { return gview.HTML(r.request.GetQueryString(key, def...)) diff --git a/g/net/ghttp/ghttp_server_session.go b/g/net/ghttp/ghttp_server_session.go index 6b1bf4ca0..bf2ba2516 100644 --- a/g/net/ghttp/ghttp_server_session.go +++ b/g/net/ghttp/ghttp_server_session.go @@ -53,7 +53,7 @@ func (s *Session) Id() string { // 获取当前session所有数据 func (s *Session) Data () map[string]interface{} { - return *s.data.Clone() + return s.data.Clone() } // 设置session diff --git a/g/os/glog/glog_logger.go b/g/os/glog/glog_logger.go index 1b5b9ca66..a6880daca 100644 --- a/g/os/glog/glog_logger.go +++ b/g/os/glog/glog_logger.go @@ -119,7 +119,7 @@ func (l *Logger) SetPath(path string) error { // 检测目录权限 if !gfile.Exists(path) { if err := gfile.Mkdir(path); err != nil { - fmt.Fprintln(os.Stderr, "glog mkdir failed: " + err.Error()) + fmt.Fprintln(os.Stderr, fmt.Sprintf(`glog mkdir "%s" failed: %s`, path, err.Error())) return err } }