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條經驗 獲得超13個贊
您應該使用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 關注
- 446 瀏覽
添加回答
舉報