2017-04-20 34 views
-1

由于这里的标题是我当前的Go应用程序的结构,该应用程序服务于静态http页面,并通过websocket发送数据。正确的导入包的项目结构

在下面的结构中,我有2包常量和主,我无法使用主包中的常量。

Server-Client Game 
    assets 
     css 
      index.css 
     js 
      app.js 
     templates 
      index.html 
    constants 
     server.go 
     game.go 
    main 
     main.go 
     hub.go 
     player.go 

我应该使用Go工作区吗?或者我能按原样工作?

我的项目目前不在我以前称为'工作区'的GoPath src中。

+2

我不知道你在问什么。 “我无法使用主包中的常量” - 这是什么意思?你想做什么?什么失败? “我应该使用Go工作区吗?” Go工作区是什么意思? “我能按原样工作吗?”你能得到现在的工作吗?它怎么样? – Flimzy

回答

3

你应该有一个至少应该包含srcbin的gopath。您的项目源代码将进入src文件夹,您发布的二进制文件将进入bin文件夹。例如,如果您的go path指向c:/ go-apps,那么您的项目可能如下所示。 。 。

c:/go-apps/src/Server-Client Game/ ... 

如果发出go install,您的二进制文件将在c:/go-apps/bin。自走还支持Git仓库,你可以直接将其导入到你的项目是这样的(假设它是公开的)

import "github.com/gorilla/mux" 

如下语句会从GitHub导入流行MUX包。你可以期望在你的食谱中找到这个

c:/go-apps/src/github.com/gorilla/mux 

你也可能有多个gopaths。当你编译一个应用程序时,它会在你的gopath中查找这个包。如果软件包不可用,它会自动下载它们。

或者安装,您可以使用go build在当前文件夹中构建二进制文件。简单地下载所有的依赖关系而不用编译使用go get

为文件夹结构,是的,这应该是很好,但我通常把我的主要的根目录,因为package mainfunc() main为切入点,只有一个包是每个目录的允许去。

1

你必须import你的constants包在你的主要文件。通过您的$GOPATH/src目录中的路径导入您自己的软件包与其他任何非标准软件包相同。所以,如果你的项目位于该文件夹中$GOPATH/src/myproject,你会导入您的常量包像这样:

import "myproject/constants" 

并给予导出(大写)常数如SomeConstant,您可以在您的主包装中将其称为constants.SomeConstant

+0

如果我的项目不在我的gopath目录中? – Higeath

+0

我会在这件事上顺从这件事,并说只是把它放在gopath。这取决于你。 https://softwareengineering.stackexchange.com/questions/271324/is-having-source-code-for-a-go-project-outside-gopath-a-bad-idea – RayfenWindspear