首页 > 其他分享 >[golang]filepath.Glob的缺陷,不支持多级目录

[golang]filepath.Glob的缺陷,不支持多级目录

时间:2023-02-02 20:24:12浏览次数:58  
标签:files tmpl views admin Glob filepath golang

  最近在使用Gin框架的模板加载过程中,发现其对于多级子目录中的模板支持有问题(仅仅支持一级子目录),后经过查看其源码发现是filepath包的Glob方法的问题。下面先说结论:

  1. 多级目录支持有问题
  2. 不支持shell下的Glob的扩展特性

  下面是我的模板目录结构:

views
│  401.html
│  home.tmpl
│
├─admin
│  ├─authorize
│  │      index.tmpl
│  │
│  └─dicts
│          index.tmpl
│
├─signin
│      signin.html
│      signout.html
│
└─users
        index.html
View Code

  按照其他语言中Glob的使用经验,应该可以轻松的列出views目录中的.tmpl文件,于是我尝试下面的模式,结果竟然为空

filepath.Glob("./views/**/*.tmpl")

  下面是测试各种模式组合的代码:

 func testGlob(){  
  patternList := []string{
        "./views/*",
        "./views/**", /** 和一个星号一样,列出直接子目录和文件 */
        "./views/*.tmpl",
        "./views/**/*.tmpl",
        "./views/**/*",
        "./views/**/*/*.tmpl",
        "./views/*/*/*.tmpl",
        "./views/**/**/*.tmpl",
        "./views/{*.tmpl,**/*.tmpl,**/**/*.tmpl}",
    }
    for _, pattern = range patternList {
        files, err := filepath.Glob(pattern)
        if err != nil {
            slog.Error(fmt.Sprintf("filepath.Glob(\"%s\") error", pattern), err)
        }
        fmt.Printf("filepath.Glob(\"%s\") result files=[%s]\n", pattern, strings.Join(files, ";"))
    }
}

  运行结果如下:

filepath.Glob("./views/*") result files=[views\401.html;views\admin;views\home.tmpl;views\signin;views\users]
filepath.Glob("./views/**") result files=[views\401.html;views\admin;views\home.tmpl;views\signin;views\users]
filepath.Glob("./views/*.tmpl") result files=[views\home.tmpl]
filepath.Glob("./views/**/*.tmpl") result files=[]
filepath.Glob("./views/**/*") result files=[views\admin\authorize;views\admin\dicts;views\signin\signin.html;views\signin\signout.html;views\users\index.html]

filepath.Glob("./views/**/*/*.tmpl") result files=[views\admin\authorize\index.tmpl;views\admin\dicts\index.tmpl]
filepath.Glob("./views/*/*/*.tmpl") result files=[views\admin\authorize\index.tmpl;views\admin\dicts\index.tmpl]
filepath.Glob("./views/**/**/*.tmpl") result files=[views\admin\authorize\index.tmpl;views\admin\dicts\index.tmpl]
filepath.Glob("./views/{*.tmpl,**/*.tmpl,**/**/*.tmpl}") result files=[]

 

标签:files,tmpl,views,admin,Glob,filepath,golang
From: https://www.cnblogs.com/dajianshi/p/17087280.html

相关文章

  • robotframe work中 自定义python library使用global variable
    在用robotframework的小伙伴,有没有遇到这样一个问题:  当你用python写一个libary时, 需要用到robotframe外面定义的globalvariable. 怎么处理?  这时一般人的做......
  • Golang入门第一天
    变量的使用自动推导类型多重赋值和匿名变量常量的使用多重变量或常量的定义iota枚举bool布尔类型浮点型字符类型字符串类型字符类型和字符串类型的区别复数类......
  • Python 中global 关键字理解
    Python中的global关键字,你了解吗?前言今天来了解下Python中的global关键字。Python变量的作用域实战案例演示之前,先要了解下Python的作用域.Python变量的作......
  • (转)Golang sort包排序(详细全集)
    原文:https://blog.csdn.net/qq_43279457/article/details/121730095一、整型首先用下里面提供的最简单的例子,排序一下整形packagemainimport( "fmt" "sort")funcmai......
  • 千姿百态,瞬息万变,Win11系统NeoVim打造全能/全栈编辑器(前端/Css/Js/Vue/Golang/Ruby
    我曾经多次向人推荐Vim,其热情程度有些类似现在卖保险的,有的时候,人们会因为一些弥足珍贵的美好暗暗渴望一个巨大的负面,比如因为想重温手动挡的快乐而渴望买下一辆二十万公里......
  • 理解Golang 赋值的并发安全性
     1.什么是并发安全并发安全就是程序在并发情况下执行的结果是正确的。比如对一个变量简单的自增操作count++,在非并发下很好理解,而在并发情况下却容易出现预期之外......
  • Golang导入其他文章
    配置GOPATHuserLogin.go文件在main.go导入其他模块gomodinitCMDB......
  • (转)golang flag包(命令行参数解析)
    原文:https://blog.csdn.net/u012206617/article/details/1059074441.1使用示例:我们以nginx为例,执行nginx-h,输出如下:nginxversion:nginx/1.10.0Usage:nginx[-?hv......
  • glob模块使用
    glob模块使用glob是一个古老的UNIX程序,它用来匹配路径文件名(pathname模式匹配),现在在LinuxShell使用和编程方面,glob还在被广泛使用。Python自带一个glob模块,让我们可以在P......
  • Beanstalkd的使用(Golang)
         最近需要引入一种新的消息队列,这个队列最好有专业、简单、消息不丢失等特性,但又不会引入过多的复杂性, 特别是在目前单枪匹马的情况......