我对Golang上的glob使用感到困惑,我可能缺少一些环境变量。我不知道我是否做对了。

在我的IDE(Intellij IDEA)上运行时,此代码可以正常工作,但在操作系统上通过go run运行时,此代码不起作用。我不知道有什么区别。

package main

import (
    "path/filepath"
    "fmt"
    "os"
)

func main() {

    file := os.Args[1]

    matches, err := filepath.Glob(file)

    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    fmt.Println(fmt.Sprintf("Number of matches:%d", len(matches)))
    fmt.Println(matches)
}

在OS上运行
go run globtest.go /Users/bernardovale/glotest/*.bkp
Number of matches:1
[/Users/bernardovale/glotest/test1.bkp]

ls -l /Users/bernardovale/glotest/*.bkp
-rw-r--r--  1 bernardovale  staff  0 May 27 12:06 /Users/bernardovale/glotest/test1.bkp
-rw-r--r--  1 bernardovale  staff  0 May 27 12:06 /Users/bernardovale/glotest/test2.bkp
-rw-r--r--  1 bernardovale  staff  0 May 27 12:06 /Users/bernardovale/glotest/test3.bkp

在IntelliJ IDEA上运行

intellij-idea - 使用filepath.Glob的Golang怪异行为-LMLPHP

最佳答案

此处的区别在于 shell 程序正在执行glob,并向您的应用程序提供各个值。从shell执行时,应将glob用双引号引起来,以确保shell不会首先评估它。请参见下面的示例。

Seans-MBP-2:~ sthorne$ echo Testing*
Testing Testing2 Testing3
Seans-MBP-2:~ sthorne$ echo "Testing*"
Testing*

关于intellij-idea - 使用filepath.Glob的Golang怪异行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37487189/

10-16 06:34