代码之家  ›  专栏  ›  技术社区  ›  poundifdef

当目录不同时,go包路径如何工作?

go
  •  0
  • poundifdef  · 技术社区  · 6 年前

    我正在电脑上做一些轻微的黑客攻击 rclone /home/poundifdef/rclone .

    当我看文件时, rclone.go ,在顶级目录中,我看到以下导入语句:

    package main
    
    import (
      _ "github.com/ncw/rclone/backend/all"
        "github.com/ncw/rclone/cmd"
      _ "github.com/ncw/rclone/cmd/all"
    )
    

    我的问题是:据我所知,在这段代码中,我们没有指定 github.com/ncs/rclone/* 包应该引用这些目录的本地版本。在我的文件系统中,我从未使用过名为 github.com/ncw . 然而,跑步 go run rclone.go 能够执行此代码。

    路在哪里 github.com/ncw/rclone

    2 回复  |  直到 6 年前
        1
  •  2
  •   Peter saif iqbal    6 年前

    github.com/ncw/rclone是一个 module file named go.mod 在存储库根目录下。既然你有 $GOPATH

    模块在文件系统中的位置无关紧要。构造导入路径时,模块中的所有目录名都会附加到模块名中。模块名称在列表的第一行中定义 ,这里是“github.com/ncw/rclone”。那么包裹在哪 ./cmd 具有导入路径 github.com/ncw/rclone/cmd .

    命令,例如 go build , go install go test 等。自动将所有其他所需软件包下载到 $HOME/go/pkg/mod ,除非 -mod=vendor vendor 都用过了。

        2
  •  0
  •   mh-cbon    6 年前

    Golang具有解析导入路径的内部机制。

    这种机制依赖于您的计算机上存在多个变量,GOROOT、GOPATH和旧版本的GO15VENDOREXPERIMENT。

    • GOROOT/src/[导入路径]
    • cwd/供应商/[导入路径]

    最长路径获胜,并被选择进行进一步处理。

    GOPATH是指向本地工作区的路径。

    https://go.googlesource.com/proposal/+/master/design/25719-go15vendor.md

    这一切都取决于计算机的设置,因此请仔细检查 go env 输出。