在MacOS中如何通过Golang程序打印GOPATH路径

在MacOS中如何通过Golang程序打印GOPATH路径

package main

import "fmt"
import "os"
func main(){
        path := os.Getenv("GOPATH")
        fmt.Println(path)
}

这将在Mac系统中输出空字符串,但在Windows系统中会输出路径

19 回复

感谢提供的信息,我会仔细研究。

谢谢

更多关于在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 路径 hugs

不,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,作为备用方案,可以检查一个环境变量,该变量指定了该程序的位置。

是的,你可以在这里了解更多信息:

GitHub

GitHub

头像

golang/go

Go编程语言。通过在GitHub上创建账户来为golang/go开发做贡献。

引用 akhilravuri:

a:= path+“/src/github.com/ibmdb/go_ibm_db/installer”

这里有个建议…永远不要这样做。请改用 filepath.Join,否则在 Windows 和 Unix/Linux 系统间迁移应用程序时会因文件路径分隔符问题遇到麻烦。

关于主题,在 MacOS 上将 GOPATH 变量放入 $HOME/.bash_profile 中,这样在你的应用程序中就能使用了。

我认为你不需要检查文件夹是否存在,只需安装包并使用即可,如下所示:

GitHub图标

ibmdb/go_ibm_db

头像

ibmdb/go_ibm_db

用于Db2系列数据库服务器的Go语言驱动程序。通过在GitHub上创建账户来为ibmdb/go_ibm_db开发做贡献。

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 中,执行会失败并记录错误。

回到顶部