Go 学习笔记(53)— Go 标准库之 path(判断绝对路径、拆分目录和文件、组合路径、返回路径目录、获取路径最后文件名、获取文件扩展名、路径匹配规则)
1. 概述說明
import "path"
path 實現了對斜杠分隔的路徑的實用操作函數。
2. 主要函數
2.1 func IsAbs
func IsAbs(path string) bool
IsAbs 返回路徑是否是一個絕對路徑。
2.2 func Split
func Split(path string) (dir, file string)
Split 函數將路徑從最后一個斜杠后面位置分隔為兩個部分( dir 和 file )并返回。如果路徑中沒有斜杠,函數返回值 dir 會設為空字符串, file 會設為 path 。兩個返回值滿足 path == dir+file 。
2.3 func Join
func Join(elem ...string) string
Join 函數可以將任意數量的路徑元素放入一個單一路徑里,會根據需要添加斜杠。結果是經過簡化的,所有的空字符串元素會被忽略。
2.4 func Dir
func Dir(path string) string
Dir 返回路徑除去最后一個路徑元素的部分,即該路徑最后一個元素所在的目錄。在使用 Split 去掉最后一個元素后, 會簡化路徑并去掉末尾的斜杠。
- 如果路徑是空字符串,會返回
.; - 如果路徑由 1 到多個斜杠后跟 0 到多個非斜杠字符組成,會返回
/; - 其他任何情況下都不會返回以斜杠結尾的路徑;
2.5 func Base
func Base(path string) string
Base 函數返回路徑的最后一個元素。在提取元素前會求掉末尾的斜杠。
- 如果路徑是"",會返回".";
- 如果路徑是只有 一個斜桿構成,會返回
/;
2.6 func Ext
func Ext(path string) string
Ext 函數返回 path 文件擴展名。返回值是路徑最后一個斜杠分隔出的路徑元素的最后一個 . 起始的后綴(包括 . ) 。如果該元素沒有 . 會返回空字符串。
2.7 func Clean
func Clean(path string) string
Clean 函數通過單純的詞法操作返回和 path 代表同一地址的最短路徑。
它會不斷的依次應用如下的規則,直到不能再進行任何處理:
- 將連續的多個斜杠替換為單個斜杠
- 剔除每一個
.路徑名元素(代表當前目錄) - 剔除每一個路徑內的
..路徑名元素(代表父目錄)和它前面的非..路徑名元素 - 剔除開始一個根路徑的
..路徑名元素,即將路徑開始處的/..替換為/
只有路徑代表根地址 / 時才會以斜杠結尾。如果處理的結果是空字符串, Clean 會返回 . 。
2.8 func Match
func Match(pattern, name string) (matched bool, err error)
如果 name 匹配 shell 文件名模式匹配字符串, Match 函數返回真。該模式匹配字符串語法為:
pattern:
{ term }
term:
‘*’ 匹配0或多個非/的字符
‘?’ 匹配1個非/的字符
‘[’ [ ‘^’ ] { character-range } ‘]’ 字符組(必須非空)
c 匹配字符c(c != ‘*’, ‘?’, ‘\’, ‘[’)
‘\’ c 匹配字符c
character-range:
c 匹配字符c(c != ‘\’, ‘-’, ‘]’)
‘\’ c 匹配字符c
lo ‘-’ hi 匹配區間[lo, hi]內的字符
Match 要求匹配整個 name 字符串,而不是它的一部分。只有 pattern 語法錯誤時,會返回 ErrBadPattern 。
3. 代碼示例
以下代碼在 Windows 平臺執行,可以看出有很多輸出和實際預期的并不一致。
func main() {absFlag := path.IsAbs("./")fmt.Println("absFlag is ", absFlag) // absFlag is falsedir, file := path.Split("E:\\golang\\src\\temp.go")fmt.Println("dir is ", dir, "file is ", file) // dir is file is E:\golang\src\temp.gofullPath := path.Join("E:", "golang", "src", "temp.go")fmt.Println("fullPath is ", fullPath) // fullPath is E:/golang/src/temp.godirPath := path.Dir("E:\\golang\\src\\temp.go")fmt.Println("dirPath is ", dirPath) // dirPath is .baseName := path.Base("E:\\golang\\src\\temp.go")fmt.Println("baseName is ", baseName) // baseName is E:\golang\src\temp.goextName := path.Ext("E:\\golang\\src\\temp.go")fmt.Println("extName is ", extName) // extName is .gofmt.Println(path.Clean("./a/b/../")) // afmt.Println(path.Match("*", "a")) // true <nil>fmt.Println(path.Match("*", "a/b/c")) // false <nil>fmt.Println(path.Match("\\b", "b")) // true <nil>
}
將 import "path" 替換為 "path/filepath" ,并將代碼中的 path 替換為 filepath ,就可以得到預期的結果。因為 filepath 包實現了兼容各操作系統的文件路徑的實用操作函數。
參考:
https://www.cnblogs.com/jkko123/p/6923962.html
https://studygolang.com/static/pkgdoc/pkg/path.htm
總結
以上是生活随笔為你收集整理的Go 学习笔记(53)— Go 标准库之 path(判断绝对路径、拆分目录和文件、组合路径、返回路径目录、获取路径最后文件名、获取文件扩展名、路径匹配规则)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不孕不育,想做试管
- 下一篇: 求大佬给个百度云破解版