在MacOS中如何通过Golang程序打印GOPATH路径
在MacOS中如何通过Golang程序打印GOPATH路径
package main
import "fmt"
import "os"
func main(){
path := os.Getenv("GOPATH")
fmt.Println(path)
}
这将在Mac系统中输出空字符串,但在Windows系统中会输出路径
感谢提供的信息,我会仔细研究。
谢谢
更多关于在MacOS中如何通过Golang程序打印GOPATH路径的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
但是在 Windows 系统中,无需进行所有这些操作,我们可以直接访问 GOPATH。
所有其他IBM开源驱动程序的工作方式相同(当用户下载开源驱动程序时下载clidriver)。因此,我必须采用相同的方式来实现。
哪个文件夹?GOPATH 是一个列表,在 Linux 和 Mac 上用冒号(:)分隔,在 Windows 上用分号(;)分隔。
export PATH=$PATH:$GOPATH/bin
我在运行程序之前已经导出了这个。
但是为什么要导出GOPATH,它应该由Go语言本身设置。
在该仓库的installer文件夹中存在setup.go文件。我尝试修改该文件,使其在用户下载仓库时不会每次都下载clidriver。
首先检查GOPATH是否已导出:
export
如果未导出,请在项目目录中执行:
cd /var/www/myproject
export GOPATH=$( pwd )
export PATH=$PATH:$GOPATH/bin
然后重新执行您的程序。
NobbZ:
他仍然不能假定我或任何客户端进行了该设置。
完全同意,我提出这一点只是为了理解他为什么看不到 GOPATH 路径 
不,Go不会篡改您的环境。它只会从中读取数据。如果设置了GOPATH,则会使用该路径。如果未设置,将使用默认路径~/go,但您的程序永远不会知道它是从默认路径还是其他任何GOPATH构建的,无论如何它都不应该关心这一点。
当用户下载我的软件包时,他会运行 setup.go 文件,该文件将下载 clidriver 压缩包并解压。但在下载压缩包之前,我想检查用户是否已存在该文件夹。如果不存在,我将下载压缩包;否则将跳过此过程。
func main() {
fmt.Println("hello world")
}
geosoft1:
在 MacOS 上,将 GOPATH 变量放入
$HOME/.bash_profile中,这样在你的应用程序中就可以使用了。
他仍然不能假设我或任何客户端已经进行了该设置。
依赖 GOPATH 来下载第三方工具是完全错误的,尤其对于一个库来说。相反,应该正确地记录依赖项。
在 Go 语言领域这样做并不会带来任何好处。
即使你成功将驱动程序下载到想要使用你库的开发者的计算机上,你认为这将如何部署到目标环境呢?
Go 的设计方式使得生成的二进制文件可以直接部署,无需关心预安装的库或其版本(除了 libc 与 musl 系统的区别)。
如果你的库与所有其他库的工作方式背道而驰,我怀疑它是否会被社区接受。
我在想为什么还要设置它。从 Go 1.9 甚至更早版本开始,就不再需要显式设置 GOPATH 了。
无论如何,如果 GOPATH 没有设置,你可以选择使用默认值(取决于你的系统),或者通过调用 go env GOPATH 来查询 go 命令。
但为什么你想知道 GOPATH 呢?除非你想要分析一些源代码,通常这是不必要的…
akhilravuri:
当用户下载我的包时,他会运行 setup.go 文件
不!
你的库可能会被静态链接到二进制文件中,并分发到网络访问受限的计算机上,你认为 ZIP 文件在那里如何被下载?
只需告诉使用你库的人,他们需要同时安装 clidriver(无论它是什么)并确保其在 PATH 中可用。
如果用户无法将其添加到 PATH,作为备用方案,可以检查一个环境变量,该变量指定了该程序的位置。
引用 akhilravuri:
a:= path+“/src/github.com/ibmdb/go_ibm_db/installer”
这里有个建议…永远不要这样做。请改用 filepath.Join,否则在 Windows 和 Unix/Linux 系统间迁移应用程序时会因文件路径分隔符问题遇到麻烦。
关于主题,在 MacOS 上将 GOPATH 变量放入 $HOME/.bash_profile 中,这样在你的应用程序中就能使用了。
package main
import "fmt"
import "os"
func main(){
path := os.Getenv("GOPATH")
fmt.Println(path)
a:= path+"/src/github.com/ibmdb/go_ibm_db/installer"
if _, err := os.Stat(a); os.IsNotExist(err) {
fmt.Println("FOLDER DOES NOT EXIST")
}
if _, err := os.Stat(a); !os.IsNotExist(err) {
fmt.Println("FOLDER EXIST")
}
}
我想检查文件夹是否存在。如果不存在,我将调用某些函数。
在 macOS 中,GOPATH 环境变量可能未设置,因为从 Go 1.8 开始,如果没有设置 GOPATH,Go 会使用默认路径 $HOME/go。你的代码通过 os.Getenv("GOPATH") 获取环境变量,如果未设置,将返回空字符串。为了确保在 macOS 中正确输出 GOPATH 路径,你可以使用 go env GOPATH 命令来获取当前 Go 环境配置的 GOPATH 值。
以下是一个改进的示例代码,通过执行 go env GOPATH 命令并捕获输出来获取 GOPATH 路径:
package main
import (
"fmt"
"os/exec"
"log"
)
func main() {
cmd := exec.Command("go", "env", "GOPATH")
output, err := cmd.Output()
if err != nil {
log.Fatalf("Failed to execute command: %v", err)
}
// 输出可能包含换行符,使用 TrimSpace 清理
gopath := string(output)
fmt.Println(gopath)
}
这段代码在 macOS 中会调用 go env GOPATH 命令,并打印出 GOPATH 路径,无论环境变量是否设置,都能正确输出。如果 Go 工具链未安装或不在 PATH 中,执行会失败并记录错误。


