猿问

如何从代码中获取当前的 GOPATH

如何GOPATH从代码块中获取电流?


runtime只有GOROOT:


// GOROOT returns the root of the Go tree.

// It uses the GOROOT environment variable, if set,

// or else the root used during the Go build.

func GOROOT() string {

    s := gogetenv("GOROOT")

    if s != "" {

        return s

    }

    return defaultGoroot

}

我可以创建一个已GOROOT替换为 的函数GOPATH,但是否有内置函数?


慕的地8271018
浏览 390回答 3
3回答

互换的青春

使用os.Getenv从文档:Getenv 检索由键命名的环境变量的值。它返回值,如果变量不存在,该值将为空。例子:package mainimport (    "fmt"    "os"    )func main() {    fmt.Println(os.Getenv("GOPATH"))}Go 1.8+ 更新Go 1.8 具有通过 go/build 导出的默认 GOPATH:package mainimport (    "fmt"    "go/build"    "os")func main() {    gopath := os.Getenv("GOPATH")    if gopath == "" {        gopath = build.Default.GOPATH    }    fmt.Println(gopath)}

萧十郎

您应该使用go/build包。package mainimport (    "fmt"    "go/build")func main() {    fmt.Println(build.Default.GOPATH)}

12345678_0001

我今天因为我正在做的事情而搞砸了这件事,这比我预期的更烦人。最后,这在我对其进行的各种测试中似乎对我有用(不是“严格的”测试)。goPath := strings.Split(os.Getenv("GOPATH"), string(os.PathListSeparator))if len(goPath) == 0 {    goPath = append(goPath, build.Default.GOPATH)} else if goPath[0] == "" {    goPath[0] = build.Default.GOPATH}请注意,如果 GOPATH 上列出了多个路径,我决定只使用第一个路径,因为我怀疑很少会列出超过 1 个路径,第一个将是go get放置源的位置(我猜)。此代码也不考虑路径是否有效。另请注意,要在获取 GOPATH 后构建文件路径,我必须使用path/filepath.Join()not path.Join()。如果第一个 arg 包含 \,则前者将在 Windows 上使用 \,而 / 则用于其他参数。尽管 windows 显然可以接受 / for 路径,但我所有的 PATH 和 GOPATH-like 环境变量都是用 windows 的普通 \ 编写的。path.Join()使用 /,产生无效路径。
随时随地看视频慕课网APP

相关分类

Go
我要回答