如何从头开始导入外部包?
我在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?
答案 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
将为您执行此操作。