在Go中强制使用特定的导入路径

Ala*_*orm 4 go

新Go程序员在这里 - 如果这是一个很好的领域,我道歉,但我的谷歌搜索没有找到我正在寻找的答案.

简短版本:作为核心Go项目外部的程序员,我是否可以强制使用特定名称导入我的包.如果是这样,怎么样?

长版本:我最近尝试bcrypt以下GitHub存储库安装软件包,具体如下go get

go get github.com/golang/crypto
Run Code Online (Sandbox Code Playgroud)

包正确下载到我的工作区,但当我尝试导入它时,我收到以下错误

$ go run main.go main.go:10:2:目录/path/to/go/src/github.com/golang/crypto/bcrypt中的代码预计导入"golang.org/x/crypto/bcrypt"

即告诉Go这个包应该是导入的golang.org/x/crypto/bcrypt.这让我想到了我真正想要的东西

go get golang.org/x/crypto/bcrypt
Run Code Online (Sandbox Code Playgroud)

我想在自己的软件包中做类似的事情 - 这个功能内置于Go包装中吗?或者是crypto/bcrypt在运行时做某事来检测和拒绝无效的包导入名称的作者?

One*_*One 6

是的它是内置的,我似乎无法找到实现文档(它是1.5或1.6中相对较新的功能)但语法是:

package name // import "your-custom-path"
Run Code Online (Sandbox Code Playgroud)

示例:https://github.com/golang/crypto/blob/master/bcrypt/bcrypt.go#L7

//编辑

此功能的设计文档为https://docs.google.com/document/d/1jVFkZTcYbNLaTxXD9OcGfn7vYv5hWtPx9--lTx1gPMs/edit

//编辑

@JimB指出https://golang.org/cmd/go/#hdr-Import_path_checking,并在go1.4发行说明中:https://golang.org/doc/go1.4#canonicalimports