亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從代碼中獲取當前的 GOPATH

如何從代碼中獲取當前的 GOPATH

Go
慕的地8271018 2021-11-08 16:05:39
如何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,但是否有內置函數?
查看完整描述

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)

}


查看完整回答
反對 回復 2021-11-08
?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

您應該使用go/build包。


package main


import (

    "fmt"

    "go/build"

)


func main() {

    fmt.Println(build.Default.GOPATH)

}


查看完整回答
反對 回復 2021-11-08
?
12345678_0001

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()使用 /,產生無效路徑。


查看完整回答
反對 回復 2021-11-08
  • 3 回答
  • 0 關注
  • 446 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號