Golang中如何查看go get下载的包保存在哪里

Golang中如何查看go get下载的包保存在哪里 我正在尝试按照gRPC教程(https://grpc.io/docs/quickstart/go.html#download-the-example)安装grpc,当我运行命令 go get -u google.golang.org/grpc 时,我找不到包被下载到哪里,你知道我该如何找到它吗?

我刚刚在 ~/go/usr/local/go/bin/ 目录中搜索过。

我是Go语言的新手,正在努力理解所有这些内容。

谢谢。

3 回复

很好,“go env” 命令也帮助我找到了 GOROOT 环境变量的位置。

谢谢!

更多关于Golang中如何查看go get下载的包保存在哪里的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


它应该在你的 GOPATH 中,cd $(go env GOPATH)/src/google.golang.org/grpc

// 代码示例
func main() {
    fmt.Println("hello world")
}

在Go语言中,go get下载的包默认保存在GOPATH环境变量指定的目录下的pkgsrc子目录中。从Go 1.11版本开始,如果启用了Go Modules(通过GO111MODULE环境变量控制或项目中有go.mod文件),包会被下载到模块缓存目录。

查找包位置的步骤:

  1. 检查GOPATH

    • 运行go env GOPATH命令查看GOPATH路径。默认情况下,在Unix-like系统中是$HOME/go,在Windows系统中是%USERPROFILE%\go
    • 包源代码通常位于$GOPATH/src目录中,例如$GOPATH/src/google.golang.org/grpc
  2. 检查模块缓存(如果使用Go Modules)

    • 运行go env GOMODCACHE命令查看模块缓存路径。默认是$GOPATH/pkg/mod
    • 包会被下载到类似$GOMODCACHE/google.golang.org/grpc@v<version>的目录中,其中<version>是具体的版本号。
  3. 直接搜索包路径

    • 使用findlocate命令在GOPATH和GOMODCACHE目录中搜索。例如:
      find $(go env GOPATH) -name "grpc" -type d
      
      find $(go env GOMODCACHE) -name "grpc*" -type d
      

示例代码:

以下是一个简单的Go程序,用于打印相关环境变量和搜索包路径:

package main

import (
    "fmt"
    "os"
    "os/exec"
    "path/filepath"
)

func main() {
    // 获取GOPATH
    gopath, err := exec.Command("go", "env", "GOPATH").Output()
    if err != nil {
        fmt.Printf("Error getting GOPATH: %v\n", err)
        return
    }
    fmt.Printf("GOPATH: %s", gopath)

    // 获取GOMODCACHE
    gomodcache, err := exec.Command("go", "env", "GOMODCACHE").Output()
    if err != nil {
        fmt.Printf("Error getting GOMODCACHE: %v\n", err)
        return
    }
    fmt.Printf("GOMODCACHE: %s", gomodcache)

    // 在GOPATH/src中搜索grpc包
    grpcPath := filepath.Join(string(gopath), "src", "google.golang.org", "grpc")
    if _, err := os.Stat(grpcPath); err == nil {
        fmt.Printf("Found grpc in GOPATH/src: %s\n", grpcPath)
    } else {
        fmt.Printf("grpc not found in GOPATH/src: %v\n", err)
    }

    // 在GOMODCACHE中搜索grpc包
    modCachePath := string(gomodcache)
    err = filepath.Walk(modCachePath, func(path string, info os.FileInfo, err error) error {
        if err != nil {
            return err
        }
        if info.IsDir() && filepath.Base(path) == "grpc" {
            fmt.Printf("Found grpc in module cache: %s\n", path)
        }
        return nil
    })
    if err != nil {
        fmt.Printf("Error walking module cache: %v\n", err)
    }
}

运行此程序将输出GOPATH和GOMODCACHE路径,并尝试定位grpc包。根据你的系统配置,包可能位于上述路径之一。如果你在教程中使用了Go Modules(例如项目中有go.mod文件),请优先检查GOMODCACHE路径。

回到顶部