开发Golang包时不能使用相对路径

3

我将要开发一个简单的golang包。

假设它的名称为“Hello”,目录结构如下所示:

hello
   games
   game-utils

然后在hello.go(主要代码)中,我有以下内容:

import (
    gameUtils "./game-utils"
    "./games"
)

这个方法在本地运行良好,但是当我将代码推送到远程仓库(例如github.com)并尝试使用go get安装时,出现了问题。问题出在导入路径上,我必须将其更改为

import (
    gameUtils "github.com/user/hello/game-utils"
    "github.com/user/hello/games"
)

问题是,每次我开发包时都无法使用"github.com/user/hello/game-utils"进行导入,因为显然我没有将其推送到远程仓库,我需要使用"./game-utils"进行导入。
有没有一种优雅的方法来解决这个问题?
1个回答

4

阅读这个

你应该始终使用以下方式进行导入:

import "github.com/user/hello/game-utils"

这是因为go工具的工作方式。它会在本地机器上的目录中查找:"GOPATH/src/github.com/user/hello/game-utils"。正如@JimB指出的那样,编译器总是使用本地源代码,而导入路径相对于GOPATH/srcgo get 工具是唯一会在互联网上查找源代码的工具。获取完后,它会将其下载到"GOPATH/src/IMPORT_PATH",这样编译器和其他工具就可以在本地结构中看到它们了。
如果要创建新项目,则应遵循相同的目录结构。如果计划上传您的代码到github,则手动创建文件夹"GOPATH/src/github.com/YOUR-GITHUB-USER/PROYECT-NAME",然后在其中初始化git repo。(这至少适用于githgsvn以及githubbitbucketgoogle code)

@Topo 你好,感谢快速回复。总结一下,我只需要:
  1. 导入 "github.com/user/hello/game-utils" 的游戏工具包:import gameUtils "github.com/user/hello/game-utils"
  2. 使用 go install github.com/user/hello 进行安装
  3. 切换到 $GOPATH/src/github.... 目录下
  4. 然后在那里开始开发(测试、提交等)即可?
- sendy halim
@sendyhalim 没问题,你说的大部分都是正确的。关于第二点,需要使用 go get 命令获取源代码(而不是 go install)。如果我要修改下载的代码,我更喜欢自己创建目录结构并使用 git clone 命令获取代码。根据我的经验,这样可以避免一些后续的 git 仓库配置问题。 - Topo
@Topo 好的!哈哈。无论如何,如果我还没有推送任何代码,那么唯一的方法就是手动创建'dir('$GOPATH/src/user/hello')'并在那里开发,对吧? - sendy halim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接