Go获取文件复合扩展名问题(比如tar.bz2)

比如文件名为test.tar.bz2,通过path.Ext方法只能获取到bz2扩展名,如何在事先并不知道是单扩展名还是复合扩展名的情况下获取到tar.bz2扩展名呢?

阅读 3.8k
2 个回答

如果根本文件名中完全不包含的.这个符号的话:

把文件名根据.分割,再把除开文件名的部分合并~

filename := "name.tar.gz"
slices := strings.Split(filename, ".") // ["name", "tar", "gz"]
strings.Join(slices[1:]) // tar.gz

Golang 最方便的一点是可以看到源码,建议你直接看 path.Ext 这个函数,逻辑挺简单的。

可以在内部做个简单的改写

func ext(path string) string {
    var fileExt string
    for i := len(path) - 1; i >= 0; i-- {
        if path[i] == '/' {
            break
        }
        if path[i] == '.' {
            fileExt = path[i:]
        }
    }
    return fileExt
}

当然,你也可以组合 path.Split()strings.Index() 等字符串处理函数

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题