3 回答
TA贡献1797条经验 获得超6个赞
使用os.Getenv
从文档:
Getenv 检索由键命名的环境变量的值。它返回值,如果变量不存在,该值将为空。
例子:
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println(os.Getenv("GOPATH"))
}
Go 1.8+ 更新
Go 1.8 具有通过 go/build 导出的默认 GOPATH:
package main
import (
"fmt"
"go/build"
"os"
)
func main() {
gopath := os.Getenv("GOPATH")
if gopath == "" {
gopath = build.Default.GOPATH
}
fmt.Println(gopath)
}
TA贡献1815条经验 获得超12个赞
您应该使用go/build包。
package main
import (
"fmt"
"go/build"
)
func main() {
fmt.Println(build.Default.GOPATH)
}
TA贡献1802条经验 获得超5个赞
我今天因为我正在做的事情而搞砸了这件事,这比我预期的更烦人。最后,这在我对其进行的各种测试中似乎对我有用(不是“严格的”测试)。
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()使用 /,产生无效路径。
- 3 回答
- 0 关注
- 389 浏览
添加回答
举报