Go 学习笔记(53)— Go 标准库之 path(判断绝对路径、拆分目录和文件、组合路径、返回路径目录、获取路径最后文件名、获取文件扩展名、路径匹配规则)
1. 概述說(shuō)明
import "path"
path 實(shí)現(xiàn)了對(duì)斜杠分隔的路徑的實(shí)用操作函數(shù)。
2. 主要函數(shù)
2.1 func IsAbs
func IsAbs(path string) bool
IsAbs 返回路徑是否是一個(gè)絕對(duì)路徑。
2.2 func Split
func Split(path string) (dir, file string)
Split 函數(shù)將路徑從最后一個(gè)斜杠后面位置分隔為兩個(gè)部分( dir 和 file )并返回。如果路徑中沒有斜杠,函數(shù)返回值 dir 會(huì)設(shè)為空字符串, file 會(huì)設(shè)為 path 。兩個(gè)返回值滿足 path == dir+file 。
2.3 func Join
func Join(elem ...string) string
Join 函數(shù)可以將任意數(shù)量的路徑元素放入一個(gè)單一路徑里,會(huì)根據(jù)需要添加斜杠。結(jié)果是經(jīng)過(guò)簡(jiǎn)化的,所有的空字符串元素會(huì)被忽略。
2.4 func Dir
func Dir(path string) string
Dir 返回路徑除去最后一個(gè)路徑元素的部分,即該路徑最后一個(gè)元素所在的目錄。在使用 Split 去掉最后一個(gè)元素后, 會(huì)簡(jiǎn)化路徑并去掉末尾的斜杠。
- 如果路徑是空字符串,會(huì)返回
.; - 如果路徑由 1 到多個(gè)斜杠后跟 0 到多個(gè)非斜杠字符組成,會(huì)返回
/; - 其他任何情況下都不會(huì)返回以斜杠結(jié)尾的路徑;
2.5 func Base
func Base(path string) string
Base 函數(shù)返回路徑的最后一個(gè)元素。在提取元素前會(huì)求掉末尾的斜杠。
- 如果路徑是"",會(huì)返回".";
- 如果路徑是只有 一個(gè)斜桿構(gòu)成,會(huì)返回
/;
2.6 func Ext
func Ext(path string) string
Ext 函數(shù)返回 path 文件擴(kuò)展名。返回值是路徑最后一個(gè)斜杠分隔出的路徑元素的最后一個(gè) . 起始的后綴(包括 . ) 。如果該元素沒有 . 會(huì)返回空字符串。
2.7 func Clean
func Clean(path string) string
Clean 函數(shù)通過(guò)單純的詞法操作返回和 path 代表同一地址的最短路徑。
它會(huì)不斷的依次應(yīng)用如下的規(guī)則,直到不能再進(jìn)行任何處理:
- 將連續(xù)的多個(gè)斜杠替換為單個(gè)斜杠
- 剔除每一個(gè)
.路徑名元素(代表當(dāng)前目錄) - 剔除每一個(gè)路徑內(nèi)的
..路徑名元素(代表父目錄)和它前面的非..路徑名元素 - 剔除開始一個(gè)根路徑的
..路徑名元素,即將路徑開始處的/..替換為/
只有路徑代表根地址 / 時(shí)才會(huì)以斜杠結(jié)尾。如果處理的結(jié)果是空字符串, Clean 會(huì)返回 . 。
2.8 func Match
func Match(pattern, name string) (matched bool, err error)
如果 name 匹配 shell 文件名模式匹配字符串, Match 函數(shù)返回真。該模式匹配字符串語(yǔ)法為:
pattern:
{ term }
term:
‘*’ 匹配0或多個(gè)非/的字符
‘?’ 匹配1個(gè)非/的字符
‘[’ [ ‘^’ ] { character-range } ‘]’ 字符組(必須非空)
c 匹配字符c(c != ‘*’, ‘?’, ‘\’, ‘[’)
‘\’ c 匹配字符c
character-range:
c 匹配字符c(c != ‘\’, ‘-’, ‘]’)
‘\’ c 匹配字符c
lo ‘-’ hi 匹配區(qū)間[lo, hi]內(nèi)的字符
Match 要求匹配整個(gè) name 字符串,而不是它的一部分。只有 pattern 語(yǔ)法錯(cuò)誤時(shí),會(huì)返回 ErrBadPattern 。
3. 代碼示例
以下代碼在 Windows 平臺(tái)執(zhí)行,可以看出有很多輸出和實(shí)際預(yù)期的并不一致。
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 ,就可以得到預(yù)期的結(jié)果。因?yàn)?filepath 包實(shí)現(xiàn)了兼容各操作系統(tǒng)的文件路徑的實(shí)用操作函數(shù)。
參考:
https://www.cnblogs.com/jkko123/p/6923962.html
https://studygolang.com/static/pkgdoc/pkg/path.htm
總結(jié)
以上是生活随笔為你收集整理的Go 学习笔记(53)— Go 标准库之 path(判断绝对路径、拆分目录和文件、组合路径、返回路径目录、获取路径最后文件名、获取文件扩展名、路径匹配规则)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不孕不育,想做试管
- 下一篇: 机器学习入门(01)— 感知机概念、实现