一、 背景

最近在看 Go源码的时候,发下部分库最早是在 x-pkg 里面的,经过一段时间迭代才进了runtime包里面。

x-pkg 里面介绍了用途和源码地址。

golang.org/x 文档

我发现 x-pkg 的源码地址都在 https://go.googlesource.com, 但是我们项目里面导入某个x-pkg库的路径确是

import "golang.org/x/sync/semaphore"

比较好奇,这import的别名是在哪里做的,感觉是个挺冷门的知识,于是搜了下相关资料。

二、实现步骤

找到了官网相关资料: hdr-Remote_import_paths

简单说就是在你的网址里面加入如下信息。

<meta name="go-import" content="example.org git https://code.org/r/p/exproj">

go get的时候就知道真正的git 地址是在 https://code.org/r/p/exproj,然后去这个地址去拉取。

curlhttps://golang.org/x/sync 看了下返回内容如下:

➜  Desktop curl --location --request GET 'https://golang.org/x/sync'
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="go-import" content="golang.org/x/sync git https://go.googlesource.com/sync">
<meta name="go-source" content="golang.org/x/sync https://github.com/golang/sync/ https://github.com/golang/sync/tree/master{/dir} https://github.com/golang/sync/blob/master{/dir}/{file}#L{line}">
<meta http-equiv="refresh" content="0; url=https://pkg.go.dev/golang.org/x/sync">
</head>
<body>
<a href="https://pkg.go.dev/golang.org/x/sync">Redirecting to documentation...</a>
</body>
</html>

demo 验证

  1. github创建一个 Go项目 ,然后调用go mod init fanlv.fun/gopkg。然后随便添加一个Go Func,方便拉取以后调用就可以了。

  2. fanlv.fun/gopkg发布一个静态页面,页面内容如下:

     <!DOCTYPE html>
     <html>
     
     <head>
         <meta charset="UTF-8" />
         <meta name="viewport" content="width=device-width" />
         <meta name="go-import" content="fanlv.fun/gopkg git https://github.com/fanlv/gopkg">
         <meta name="go-source"
             content="fanlv.fun/gopkg https://github.com/fanlv/gopkg https://github.com/fanlv/gopkg/tree/master{/dir} https://github.com/fanlv/gopkg/blob/master{/dir}/{file}#L{line}">
         <title>fanlv/gopkg</title>
     </head>
     
     <body>
         <a href="https://github.com/fanlv/gopkg"> https://github.com/fanlv/gopkg</a>
     </body>
     
     </html>
    
  3. 在本地新建一个项目,然后go get fanlv.fun/gopkg 尝试下正常。

image.png

三、总结

挺简单的一个东西。没啥好说的。