在导入之前我必须有文件是没有意义的

时间:2013-09-29 02:28:08

标签: github go install package

如何从头开始导入外部包?

我在Go中编写了一个库包并测试通过github进行分发。我正在关注http://golang.org/doc/code.html并使用mac但收到错误消息

我放的是

cmd。

$ mkdir $HOME/go
$ export GOPATH=$HOME/go
$ export PATH=$PATH:$GOPATH/bin
$ mkdir -p $GOPATH/src/github.com/user
$ mkdir $GOPATH/src/github.com/user/project

然后我把

$ go get github.com/user/project

go install

仍有错误
can't load package: package github.com/golingorg/goling: no Go source files in /Users/user_name/go/src/github.com/user/project

我不明白为什么我们需要文件来导入Go中的外部包。外部包意味着我从外部包中获取并创建文件。

我的问题是如何从头开始导入外部包。大多数文件只是说像

 go get github.com/yasushi-saito/fifo_queue

这给了我“$ GOPATH没有设置。” 作为初学者,我正在为“go get”工作设置环境感到沮丧。非常感谢。

摘要

   How do I import an external package from scratch?

3 个答案:

答案 0 :(得分:5)

Go是一种静态类型语言,因此它需要在编译时解析对外部包的任何引用。 “go”工具期望外部包的源在本地可访问的路径中,因此您需要使用“go get”来下载它们。

根据您的描述,您可能没有设置GOPATH。使用ECHO $ GOPATH检查是否设置正确。

对于我的GO项目,我通常使用GOPATH作为工作空间,类似于Python中的virtualenv或Ruby中的rbenv / rvm。假设我的项目“myproject”在/ projects / myproject中有根,我的源文件将位于/ projects / myproject / src / myproject,并且导入了“github.com/user/project”,然后

> cd /projects/myproject
> export GOPATH=`pwd`          # or export GOPATH=/projects/myproject
> go get github.com/user/project

在“go get”命令之后,“github.com/user/project”的来源将下载到/projects/myproject/src/github.com/user/project。

当你使用“go build”或“go install”时,它将编译为外部包在$ GOPATH / src文件夹中。

如果在默认文件夹中安装Go,则需要在PATH环境变量中包含Go installed bin文件夹。之后,GOPATH是另一个环境变量,你需要“go”工具才能工作。

答案 1 :(得分:5)

我是怎么做到的:

<强> 1。首先设置工作区

 mkdir $HOME/go
 export GOPATH=$HOME/go
 export PATH=$PATH:$GOPATH/bin

<强> 2。创建项目

 mkdir -p $GOPATH/src/github.com/user
 mkdir $GOPATH/src/github.com/user/hello
 touch $GOPATH/src/github.com/user/hello/hello.go

第3。安装

go install github.com/user/hello

<强> 4。运行它

cd $GOPATH/bin
./hello

我使用了以下流浪者形象:https://github.com/dcoxall/vagrant-golang

答案 2 :(得分:2)

go get的帮助输出中,它说:

  

默认情况下,get使用网络检出丢失的包,但不使用它来查找现有包的更新。

在运行$GOPATH/src/github.com/user/project之前创建go get目录时,它假定已经下载了包,因此跳过尝试构建和安装包的步骤。失败的原因是该目录不包含Go源文件。

因此,简单的解决方法是不创建与您尝试下载的软件包关联的文件夹:go get将为您执行此操作。