一尘不染

Go App Engine专案的套件结构

go

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

根据教程,我应该创建一个根项目目录,与该项目相关的所有源文件都应进入该目录。因此,我的工作区如下所示:

/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项目的结构是什么,如何导入源文件?


阅读 177

收藏
2020-07-02

共1个答案

一尘不染

您的问题的根源似乎是src目录丢失。。

  1. 是的,您的项目目录应该位于中GOPATH。Go希望目录结构遵循文档中描述的工作空间,其中描述了包含src目录中所有包的工作区。编译时,它在src文件夹(或pkg,如果已安装)下的gopath中查找软件包。尽管App Engine文档没有具体说明,但据我了解,该结构应与该src结构匹配。

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

        /src
     /MyApp/app.yaml
     /MyApp/myappmain.go
     /items/items.go
     /router/router.go

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

我已经通过将log.Println("<pkg>")每个软件包的init()func
进行了测试,它们都只运行一次,因为有人指出如果结构错误,这是一个问题。

2020-07-02