mirror of
https://gitee.com/johng/gf
synced 2026-06-07 02:12:11 +08:00
优化
This commit is contained in:
@ -14,6 +14,7 @@ import (
|
||||
"gitee.com/johng/gf/g/encoding/gparser"
|
||||
"strconv"
|
||||
"fmt"
|
||||
"gitee.com/johng/gf/g/frame/gins"
|
||||
)
|
||||
|
||||
// 服务端请求返回对象
|
||||
@ -136,6 +137,15 @@ func (r *Response) WriteXml(content interface{}, rootTag...string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *Response) Template(tpl string, params...map[string]interface{}) error {
|
||||
if b, err := gins.View().Parse(tpl, params...); err != nil {
|
||||
return err
|
||||
} else {
|
||||
r.Write(b)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 允许AJAX跨域访问
|
||||
func (r *Response) SetAllowCrossDomainRequest(allowOrigin string, allowMethods string, maxAge...int) {
|
||||
age := 3628800
|
||||
|
||||
@ -101,6 +101,12 @@ func IsDir(path string) bool {
|
||||
return s.IsDir()
|
||||
}
|
||||
|
||||
// 获取当前工作目录
|
||||
func Pwd() string {
|
||||
pwd, _ := filepath.Abs(filepath.Dir(os.Args[0]))
|
||||
return pwd
|
||||
}
|
||||
|
||||
// 判断所给路径是否为文件
|
||||
func IsFile(path string) bool {
|
||||
s, err := os.Stat(path)
|
||||
|
||||
@ -34,6 +34,12 @@ func New () *SPath {
|
||||
// 设置搜索路径,只保留当前设置项,其他搜索路径被清空
|
||||
func (sp *SPath) Set(path string) error {
|
||||
r := gfile.RealPath(path)
|
||||
if r == "" {
|
||||
r = sp.Search(path)
|
||||
if r == "" {
|
||||
r = gfile.RealPath(gfile.Pwd() + gfile.Separator + path)
|
||||
}
|
||||
}
|
||||
if r != "" && gfile.IsDir(r) {
|
||||
sp.mu.Lock()
|
||||
sp.paths = []string{strings.TrimRight(r, gfile.Separator)}
|
||||
@ -47,6 +53,12 @@ func (sp *SPath) Set(path string) error {
|
||||
// 添加搜索路径
|
||||
func (sp *SPath) Add(path string) error {
|
||||
r := gfile.RealPath(path)
|
||||
if r == "" {
|
||||
r = sp.Search(path)
|
||||
if r == "" {
|
||||
r = gfile.RealPath(gfile.Pwd() + gfile.Separator + path)
|
||||
}
|
||||
}
|
||||
if r != "" && gfile.IsDir(r) {
|
||||
sp.mu.Lock()
|
||||
sp.paths = append(sp.paths, r)
|
||||
|
||||
@ -81,7 +81,7 @@ func (view *View) AddPath(path string) error {
|
||||
}
|
||||
|
||||
// 解析模板,返回解析后的内容
|
||||
func (view *View) Parse(file string, params map[string]interface{}) ([]byte, error) {
|
||||
func (view *View) Parse(file string, params...map[string]interface{}) ([]byte, error) {
|
||||
path := view.paths.Search(file)
|
||||
content := view.contents.Get(path)
|
||||
if content == "" {
|
||||
@ -94,6 +94,11 @@ func (view *View) Parse(file string, params map[string]interface{}) ([]byte, err
|
||||
if content == "" {
|
||||
return nil, errors.New("tpl \"" + file + "\" not found")
|
||||
}
|
||||
// 模板参数
|
||||
data := (map[string]interface{})(nil)
|
||||
if len(params) > 0 {
|
||||
data = params[0]
|
||||
}
|
||||
// 执行模板解析,互斥锁主要是用于funcmap
|
||||
view.mu.RLock()
|
||||
defer view.mu.RUnlock()
|
||||
@ -101,7 +106,7 @@ func (view *View) Parse(file string, params map[string]interface{}) ([]byte, err
|
||||
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 {
|
||||
if err := tpl.Execute(buffer, data); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,16 +1,13 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"gitee.com/johng/gf/g/util/gregex"
|
||||
"fmt"
|
||||
"gitee.com/johng/gf/g/util/gutil"
|
||||
"path/filepath"
|
||||
"os"
|
||||
)
|
||||
|
||||
|
||||
|
||||
func main() {
|
||||
s := `username @ required|length:6,30 # 请输入用户名称|用户名称长度非法`
|
||||
match, err := gregex.MatchString(`\s*((\w+)\s*@){0,1}\s*([^#]+)\s*(#\s*(.*)){0,1}\s*`, s)
|
||||
fmt.Println(err)
|
||||
gutil.Dump(match)
|
||||
fmt.Println(filepath.Abs(filepath.Dir(os.Args[0])))
|
||||
}
|
||||
Reference in New Issue
Block a user