3

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

我在 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 未设置”。作为一个初学者,我对设置“去”工作的环境感到沮丧。提前非常感谢。

概括

   How do I import an external package from scratch?
4

3 回答 3

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 安装的 bin 文件夹。之后,GOPATH 是“go”工具工作所需的另一个环境变量。

于 2013-09-29T04:31:33.540 回答
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

于 2015-03-23T06:28:17.287 回答
2

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

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

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

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

于 2013-09-29T05:04:33.980 回答