将float64转换为不包含[]的字符串

我正在尝试扫描一些文件夹并对它们进行排序,以找到最高的版本号。{“ 10.1”,“ 9.6”,“ 7.2”},然后建立路径。但是,我得到的是在路径中的[]括号,我需要摆脱这些。


这就是我得到的:


C:\Program Files\PostgreSQL\[10.1]\bin\psql.exe


        root := "C:/Program Files/PostgreSQL"



        files, err := ioutil.ReadDir(root)

        if err != nil {

            return "", err

        }


        folders := []float64{}

        for _, f := range files {

            if f.IsDir() {

                if converted, err := strconv.ParseFloat(f.Name(),64); err == nil {

                    folders = append(folders, converted)

                }

            }

        }


        sort.Float64s(folders)


        log.Println(folders[len(folders)-1:])


        highestVersion := fmt.Sprintf("%v",folders[len(folders)-1:])


        execPath = filepath.Join(root, highestVersion, "bin", "psql.exe") 

        log.Println(execPath)


Cats萌萌
浏览 230回答 2
2回答

aluckdog

问题在这条线上:highestVersion := fmt.Sprintf("%v",folders[len(folders)-1:])该%v格式说明,如一些人所说,是“价值”的简写。现在,让我们看一下您的价值:folders[len(folders)-1:]您在这里所说的是,“从头folders开始len(folders-1)”。您的变量是一个切片,仅包含中的最后一项folders。通过在值周围使用方括号来打印切片,并且由于您拥有一个值,因此它将打印由方括号括起来的值。如果只想打印该位置中包含的浮点数,则应删除注释中指定的冒号。我建议您使用fmt动词%f或进行打印%g,具体取决于您的用例。可以在pkg / fmt文档中找到有关哪些动词可用printf以及其他相关功能的更多信息。

慕雪6442864

一种可能的方法是使用正则表达式以确保每个路径都具有预期的格式,并通过子匹配(匹配组)将版本号提取为浮点,然后按其浮点版本号值对路径字符串进行排序并返回最高的。例如:func main() {  paths := []string{    `C:\Program Files\PostgreSQL\[1.2]\bin\psql.exe`,    `C:\Program Files\PostgreSQL\[9.6]\bin\psql.exe`,    `C:\Program Files\PostgreSQL\[10.1]\bin\psql.exe`,    `C:\Program Files\PostgreSQL\[7.2]\bin\psql.exe`,  }  sort.Slice(paths, func(i, j int) bool {    return parseVersion(paths[i]) >= parseVersion(paths[j])  })  fmt.Printf("OK: highest version path = %s\n", paths[0])  // OK: highest version path = C:\Program Files\PostgreSQL\[10.1]\bin\psql.exe}var re = regexp.MustCompile(`C:\\Program Files\\PostgreSQL\\\[(\d+\.\d+)\]\\bin\\psql.exe`)func parseVersion(s string) float32 {  match := re.FindStringSubmatch(s)  if match == nil {    panic(fmt.Errorf("invalid path %q", s))  }  version, err := strconv.ParseFloat(match[1], 32)  if err != nil {    panic(err)  }  return float32(version)}当然,如果这对您的用例很重要,则可以修改路径正则表达式以匹配不同的位置模式。
打开App,查看更多内容
随时随地看视频慕课网APP