Go - 源码 - filepath · Dir

238 阅读1分钟
package filepath

import "os"

// Dir path的目录,尾缀不会包含多余的分隔符。
// 如果path以分隔符结束的话,Dir相当于只clean末尾多余的分隔符。Dir("a/")=="a"
func Dir(path string) string {
	i := len(path)-1
	// i 最小值为-1
	for i >= 0 && !os.IsPathSeparator(path[i]) {
		i--
	}
	// 此时i那么指向分隔符,要么为-1。为了处理-1的情况需要使用i+1作为范围终止
	// 即使使用i+1作为范围终止,最后一个字符可能是分隔符。不过Clean保证清理此种情况的尾缀分隔符
	return Clean(path[:i+1])
}

样例源码:github.com/morganxf/ex…