golang Import path路径配置

一曲冷凌霜 提交于 2020-04-05 18:42:41

go command在获取源码包时,会根据代码中的import path来导向该通过何种方式下载
参考:https://golang.org/cmd/go/#hdr-Remote_import_paths

  1. go command内置支持一些常见的站点,比如Bitbucket或GitHub等,会有内置对应的取包方式,比如import "github.com/user/project"go command会用Git去获取GitHub源
Bitbucket (Git, Mercurial)

	import "bitbucket.org/user/project"
	import "bitbucket.org/user/project/sub/directory"

GitHub (Git)

	import "github.com/user/project"
	import "github.com/user/project/sub/directory"

Launchpad (Bazaar)

	import "launchpad.net/project"
	import "launchpad.net/project/series"
	import "launchpad.net/project/series/sub/directory"

	import "launchpad.net/~user/project/branch"
	import "launchpad.net/~user/project/branch/sub/directory"

IBM DevOps Services (Git)

	import "hub.jazz.net/git/user/project"
	import "hub.jazz.net/git/user/project/sub/directory"
  1. 除了以上这些常见的站点,如果代码存放在自己搭建的version control system,那么配置import路径时有两种方式
    1. repository.vcs/path,在import路径中指明是哪种类型的vcs,告诉go command用哪种方式去获取。

      • 比如:import "example.org/repo.git/foo/bar"表示用git从example.org/repo 获取foo/bar包。
      • 支持的vcs有 :
      	Bazaar      .bzr
      	Fossil      .fossil
      	Git         .git
      	Mercurial   .hg
      	Subversion  .svn
      
    2. 如果import pathimport "example.org/pkg/foo"中没有指明vcs,那么go command会通过一个https/http请求curl https://example.org/pkg/foo?go-get=1 来取得vcs的信息。

      • 一般的vcs都会实现这个方法,返回格式<meta name="go-import" content="import-prefix vcs repo-root">,比如<meta name="go-import" content="example.org git https://code.org/r/p/exproj">
      • 其中import-prefix 必须匹配代码中import path的前缀,比如如果代码中 import "otherexample.org/pkg/foo"这样就不匹配,go command会报错
      • 其中vcs支持的有"bzr", "fossil", "git", "hg", "svn"
      • 其中repo-root指的是下载的root地址,比如go command会使用git clone https://code.org/r/p/exproj来获取源码包
      • 特别注意的是当使用go mod时,curl https://example.org/pkg/foo?go-get=1 返回的格式支持代理模式,比如请求返回的是<meta name="go-import" content="example.org mod https://code.org/moduleproxy">,其中vcs填充的是mod,表示这个example.org/pkg/foo可以从地址为https://code.org/moduleproxy的go module代理服务中获取。这样就成功的让go command使用代理服务下载源码包
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!