Go App Engine项目的包结构

时间:2014-03-13 21:57:18

标签: google-app-engine go

我一直关注Google App Engine's Go Tutorial

根据教程,我应该创建一个根项目目录,所有与项目相关的源文件都应该进入这个目录。因此,我的工作区看起来像这样:

/MyProject
 /router
  router.go
 /items
  items.go

当我尝试在router.go中引用items.go时:

router.go

import(
    "items"
)

func itemsHandler(writer http.ResponseWriter, request * http.Request){
    anItem := items.Item{Id: 245,Name: "Chocolate",Price: 1.50};
}

该应用无法编译,因为items is undefined现在我对如何组织Google App Engine上的Go项目感到非常困惑。我想知道的是

  1. 我的项目目录是否应该位于Go SDK的gopath目录中,还是位于任何位置?教程没有说清楚。

  2. Go App Engine项目的结构是什么以及如何导入源文件?

1 个答案:

答案 0 :(得分:7)

似乎问题的原因是缺少src目录。

  1. 是的,您的项目目录应该在GOPATH中。 Go期望目录结构遵循描述workspaces的文档中描述的所有包位于src目录中。编译时,它会在src文件夹下的gopath中查找包(如果已安装,则查找pkg)。虽然App Engine文档没有明确说明这一点,但我理解结构应该与src结构匹配。

  2. 目录结构的示例如下:从设置GOPATH=/myproject开始。在GOPATH目录中,具有以下结构(以某些包为例)。

    /src
     /MyApp/app.yaml
     /MyApp/myappmain.go
     /items/items.go
     /router/router.go
    
  3. 当我构建时,我通过为其提供MyApp文件夹dev_appserver ./MyApp

    来运行dev appserver

    我已经通过将log.Println("<pkg>")放在每个包init() func中进行了测试,并且它们都只运行一次,因为有些人表示如果结构错误就会出现问题。