github.com/gogf/gf/v2@v2.7.4/os/gfile/gfile_sort.go (about) 1 // Copyright GoFrame Author(https://goframe.org). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/gogf/gf. 6 7 package gfile 8 9 import ( 10 "strings" 11 12 "github.com/gogf/gf/v2/container/garray" 13 ) 14 15 // fileSortFunc is the comparison function for files. 16 // It sorts the array in order of: directory -> file. 17 // If `path1` and `path2` are the same type, it then sorts them as strings. 18 func fileSortFunc(path1, path2 string) int { 19 isDirPath1 := IsDir(path1) 20 isDirPath2 := IsDir(path2) 21 if isDirPath1 && !isDirPath2 { 22 return -1 23 } 24 if !isDirPath1 && isDirPath2 { 25 return 1 26 } 27 if n := strings.Compare(path1, path2); n != 0 { 28 return n 29 } else { 30 return -1 31 } 32 } 33 34 // SortFiles sorts the `files` in order of: directory -> file. 35 // Note that the item of `files` should be absolute path. 36 func SortFiles(files []string) []string { 37 array := garray.NewSortedStrArrayComparator(fileSortFunc) 38 array.Add(files...) 39 return array.Slice() 40 }