1. 程式人生 > >計算兩個絕對路徑的相對路徑(go)

計算兩個絕對路徑的相對路徑(go)

寫一個函式計算出兩個絕對路徑(如path1 = /a/b/c/d, path2 = /a/e/f)的相對路徑為 ../../e/f

func getRelativePath(path1, path2 string) (string, error) {
	if path1 == "" || path2 == "" {
		return "", errors.New("絕對路徑不可以為空")
	}
	arr1 := strings.Split(path1[1:], "/")
	arr2 := strings.Split(path2[1:], "/")
	depth := 0
	for i := 0; i < len(arr1) && i < len(arr2); i++ {
		if arr1[i] == arr2[i] {
			depth ++
		} else {
			break
		}
	}
	prefix := ""
	if len(arr1) - depth - 1 <= 0 {
		prefix = "./"
	} else {
		for i := len(arr1) - depth - 1; i > 0; i -- {
			prefix += "../"
		}
	}
	fmt.Println(depth)
	if len(arr2) - depth > 0 {
		prefix += strings.Join(arr2[depth:], "/")
	}
	return prefix, nil
}