我对 golang 完全陌生,我想知道为什么许多 golang 项目在他们的源代码中这样写:
import "github.com/stretchr/testify/assert"
Run Code Online (Sandbox Code Playgroud)
如果这testify转移到 bitbucket 怎么办?
为什么import testify不像其他语言一样下载 testify 和?
在我回答您的问题之前,您需要了解 golang 管理其包和依赖项的方式。
要下载软件包,请使用该go get命令。用法示例:
$ go get github.com/stretchr/testify
Run Code Online (Sandbox Code Playgroud)
上面的命令将下载 testify 包,然后将其存储在本地工作空间下,其结构遵循其 url(TL;DR工作空间路径注册为$GOPATHenv 变量)。
$GOPATH/src/github.com/stretchr/testify
Run Code Online (Sandbox Code Playgroud)
来自文档的解释为什么下载的包名称将跟随它的 url:
Get 下载由导入路径命名的包及其依赖项。
现在关于你的问题:
为什么很多golang项目直接从GitHub导入?
该声明import "github.com/stretchr/testify/assert" 并不意味着该包是直接从 github 网站(通过 http)导入的。它是从当地进口的,从github.com/stretchr/testify下路$GOPATH/src。该软件包之前已下载并存储在那里,因此可以将其导入任何项目。
以下是有关导入语句的文档的说明:
Go 路径 (
$GOPATH) 用于解析导入语句。
也看看下面的一些代码(取自我的本地)。
$ echo $GOPATH
/Users/novalagung/Documents/go
$ go get -u github.com/stretchr/testify
# package will be downloaded into $GOPATH/src folder using the same structure as the github url
$ tree -L 1 $GOPATH/src/github.com/stretchr/testify
/Users/novalagung/Documents/go/src/github.com/stretchr/testify
??? Gopkg.lock
??? Gopkg.toml
??? LICENSE
??? README.md
??? _codegen
??? assert
??? doc.go
??? http
??? mock
??? package_test.go
??? require
??? suite
??? vendor
Run Code Online (Sandbox Code Playgroud)
所以如果你想导入任何包,它必须在$GOPATH/src文件夹下。
如果这个作证转移到bitbucket怎么办?
它对您的本地项目没有影响,因为之前已经下载了所需的包。但是,如果您想更新它,您可能需要更改包路径以遵循它的新 url,可能像bitbucket.org/stretchr/testify/assert? 取决于新的 bitbucket url 的样子。
但我不认为作证的所有者会这样做,因为它会破坏很多人的代码。
| 归档时间: |
|
| 查看次数: |
4795 次 |
| 最近记录: |