Go App Engine项目的包结构

W.K*_*K.S 2 google-app-engine go

我一直关注Google App Engine的Go教程.

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

/MyProject
 /router
  router.go
 /items
  items.go
Run Code Online (Sandbox Code Playgroud)

当我尝试在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};
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

mil*_*onb 7

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

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

  2. 目录结构的一个例子是这样的:从设置开始GOPATH=/myproject.在目录中GOPATH,具有以下结构(使用一些包作为示例).

    /src
     /MyApp/app.yaml
     /MyApp/myappmain.go
     /items/items.go
     /router/router.go
    
    Run Code Online (Sandbox Code Playgroud)

当我构建时,我通过给它提供MyApp文件夹来运行dev appserver dev_appserver ./MyApp

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