<p>In the file <code>github.com/upspin/cmd/upspinserver/main.go</code>, the code imports the package <code>upspin.io/cloud/storage/disk</code>, but a visit to that URL shows a 404 (not found). The code for that package is actually located at <code>github.com/upspin/cloud/storage/disk</code>:</p>
<pre><code>// Copyright 2016 The Upspin Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Command upspinserver is a combined DirServer and StoreServer for use on
// stand-alone machines. It provides only the production implementations of the
// dir and store servers (dir/server and store/server).
package main // import "upspin.io/cmd/upspinserver"
import (
"upspin.io/cloud/https"
"upspin.io/serverutil/upspinserver"
// Storage implementation.
_ "upspin.io/cloud/storage/disk"
)
func main() {
ready := upspinserver.Main()
https.ListenAndServeFromFlags(ready)
}
</code></pre>
<p>How is this working with the Go compiler? Is the server at upspin.io just doing a redirect?</p>
<p>Can I use this same trick in my own code? In other words, if my code lives at <code>github.com/someuser/foo</code>, can I import it as <code>mycompany.com/myproject/foo</code>?</p>
<hr/>**评论:**<br/><br/>sh41: <pre><p>Yes, those are so-called vanity import paths, and you can create your own. It is documented in the second half of <a href="https://golang.org/cmd/go/#hdr-Remote_import_paths">https://golang.org/cmd/go/#hdr-Remote_import_paths</a> section.</p>
<p>Also, it’s worth mentioning that the Go compiler doesn’t deal with this, the <code>go get</code> tool does. The Go compiler just finds Go packages on disk, in your GOPATH workspace where <code>go get</code> has placed them.</p></pre>grkuntzmd: <pre><p>So in the example above, <code>go get</code> would place the file in <code>$GOPATH/src/upspin.io/cloud/storage/disk</code>?</p></pre>sh41: <pre><p>Precisely.</p>
<p>You can try it. Do:</p>
<pre><code>export GOPATH=/tmp/empty
go get -v upspin.io/cmd/upspinserver
tree $GOPATH/src
</code></pre>
<p><code>go get</code> will fetch all the necessary dependencies of <code>upspinserver</code>, including <code>upspin.io/cloud/storage/disk</code>.</p>
<p>You can also view the source code of that package at its canonical import path via gotools.org. See <a href="https://gotools.org/upspin.io/cmd/upspinserver" rel="nofollow">here</a>.</p></pre>shovelpost: <pre><p><a href="https://texlution.com/post/golang-canonical-import-paths/" rel="nofollow">Yes.</a></p>
<p>Also read <a href="https://golang.org/cmd/go/#hdr-Remote_import_paths" rel="nofollow">this</a>.</p></pre>grkuntzmd: <pre><p>I did not know about the <code>import "path"</code> comment. Thanks.</p></pre>TheMerovius: <pre><p>Because this hasn't been explicitly mentioned:</p>
<p><a href="https://upspin.io/cloud/storage/disk?go-get=1" rel="nofollow">https://upspin.io/cloud/storage/disk?go-get=1</a></p></pre>dabshores: <pre><p>As a long time go dev, my advice is to ignore the import path and trust <code>git ls-remote --get-url</code> and <code>git rev-parse HEAD</code></p></pre>
这是一个分享于 的资源,其中的信息可能已经有所发展或是发生改变。
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码`
- 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传