【发布时间】:2017-04-19 14:26:48
【问题描述】:
看看这个 shell 会话,我在其中用 Go 构建了一个简单的 hello world 程序。
$ cd ~/lab/hello/
$ ls
hello.go
$ cat hello.go
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}
$ go build
$ ./hello
hello, world
$ go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH=""
GORACE=""
GOROOT="/usr/lib/go"
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 8.7 (jessie)
Release: 8.7
Codename: jessie
这是我不明白的。 https://golang.org/doc/install#testing 的教程说我应该将我的 hello.go 文件放在 ~/go/src/hello。但我没有遵循这一点。那么我的程序是如何编译的呢?如果我的程序以这种方式编译得很好,为什么文档说我应该将源代码保留在 ~/go/src 或 $GOPATH/src 似乎并不重要?
是否存在确实需要将源代码放在 $GOPATH/src 的场景?
【问题讨论】:
-
阅读How to Write Go Code,它解释了这一切。
-
@MadWombat 正在遵循经过测试、验证、推荐的“愚蠢的”方式?如果一台机器的设计者告诉你:“你必须先按下这个按钮,然后你才能做 X。”您是否还要问有什么证据表明最好先按下按钮? “工具的创建者告诉你这样做”是否证据不足?好吧,可能不像在编程中自我那么强大。
-
就是这样。编程语言不仅仅是一台机器,它还是一种工具。作为该工具的用户,我必须了解它是如何工作的,否则我无法使用它。所以不,我不会只是“按下按钮 X”,我需要确切地知道我为什么要这样做以及会发生什么。是的,强迫我使用域名作为目录名称来构建我的源代码是令人难以置信的愚蠢到被侮辱的地步。幸运的是,供应商支持消除了一些痛苦。
-
@Volker 你错过了这个问题的重点。这个问题不是关于我是否应该遵循文档所说的内容。这个问题是关于如果我不遵循文档,什么情况会给我带来问题。这将帮助我更好地理解遵循文档的有用性。
标签: go projects-and-solutions directory-structure