我一直关注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项目感到非常困惑。我想知道的是
我的项目目录是否应该位于Go SDK的gopath
目录中,还是位于任何位置?教程没有说清楚。
Go App Engine项目的结构是什么以及如何导入源文件?
答案 0 :(得分:7)
似乎问题的原因是缺少src
目录。
是的,您的项目目录应该在GOPATH
中。 Go期望目录结构遵循描述workspaces的文档中描述的所有包位于src
目录中。编译时,它会在src文件夹下的gopath中查找包(如果已安装,则查找pkg)。虽然App Engine文档没有明确说明这一点,但我理解结构应该与src
结构匹配。
目录结构的示例如下:从设置GOPATH=/myproject
开始。在GOPATH
目录中,具有以下结构(以某些包为例)。
/src
/MyApp/app.yaml
/MyApp/myappmain.go
/items/items.go
/router/router.go
当我构建时,我通过为其提供MyApp文件夹dev_appserver ./MyApp
我已经通过将log.Println("<pkg>")
放在每个包init()
func中进行了测试,并且它们都只运行一次,因为有些人表示如果结构错误就会出现问题。