【问题标题】:How to compile go code that doesn't conform to the `go get` pattern如何编译不符合`go get`模式的go代码
【发布时间】:2014-08-24 00:08:47
【问题描述】:

我的系统上安装了 Go,并且可以安装符合 go get ... 模式的软件包。如您所见in this link,麻省理工学院正在将 Go 用于其一门课程。但是,安装提供的代码并不像运行go get ... 并将所有软件包安装在适当的位置那么容易。相反,它要求您克隆存储库,然后“编译我们为您提供的初始软件并使用下载的输入文件运行它”。如您所见,它指示用户导出 GOPATH(我认为假设学生是第一次使用 Go)

 git clone git://g.csail.mit.edu/6.824-golabs-2014 6.824

    $ add 6.824
    $ export GOPATH=$HOME/6.824
    $ cd ~/6.824/src/main
    $ go run wc.go master kjv12.txt sequential

当我克隆 repo 并从 /src/main 运行 go run wc.go master kjv12.txt sequential 时,它找不到包。源代码(例如,应该运行的 wc.go 文件)似乎假定包在同一目录中。这是 /src/main 中的 wc.go 文件,它需要 /src/mapreduce

import "os"
import "fmt"
import "mapreduce"
import "container/list"

编译像这样分发的代码的最佳/最简单/最方便的方法是什么?我能想到的一种方法是将cd 放入每个包中,运行go install 然后更改每个需要这些包的文件中的导入路径,这非常耗时,我认为这不是推荐的方法,并且我也不想改变 GOPATH

【问题讨论】:

    标签: go


    【解决方案1】:

    例如,跟随MIT 6.824 instructions

    $ cd $HOME
    $ git clone git://g.csail.mit.edu/6.824-golabs-2014 6.824
    Cloning into '6.824'...
    remote: Counting objects: 108, done.
    remote: Compressing objects: 100% (107/107), done.
    remote: Total 108 (delta 40), reused 0 (delta 0)
    Receiving objects: 100% (108/108), 1.61 MiB | 561.00 KiB/s, done.
    Resolving deltas: 100% (40/40), done.
    Checking connectivity... done.
    $ cd 6.824
    $ ls
    Makefile  src
    $ export GOPATH=$HOME/6.824
    $ cd ~/6.824/src/main
    $ go version
    go version devel +01dfd37363e9 Fri Aug 22 22:22:16 2014 +0400 linux/amd64
    $ go env
    GOARCH="amd64"
    GOBIN=""
    GOCHAR="6"
    GOEXE=""
    GOHOSTARCH="amd64"
    GOHOSTOS="linux"
    GOOS="linux"
    GOPATH="/home/peter/6.824"
    GORACE=""
    GOROOT="/home/peter/go"
    GOTOOLDIR="/home/peter/go/pkg/tool/linux_amd64"
    CC="gcc"
    GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
    CXX="g++"
    CGO_ENABLED="1"
    $ go run wc.go master kjv12.txt sequential
    # command-line-arguments
    ./wc.go:12: missing return at end of function
    ./wc.go:16: missing return at end of function
    $ 
    

    运行这些命令时会得到什么输出?


    对于wc.go

    import "os"
    import "fmt"
    import "container/list"
    

    $GOROOT

    中找到
    import "mapreduce"
    

    在 $GOPATH 中找到。


    使用

    $ export GOPATH=$HOME/6.824
    

    【讨论】:

    • 这让我担心的原因如下:这是我运行env时通常所说的:"/Users/myname/go/"。但是,通过此导出,它现在显示为 "/Users/myname/6.824"。这不是覆盖现有 GOPATH 的问题吗?另外,我希望它像这样“/Users/myname/go/6.824` 不仅仅是一个终端会话。go get 将它永久添加到所需位置的路径中,但现在不能这样做
    猜你喜欢
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    相关资源
    最近更新 更多