duange2971
duange2971
2016-04-14 07:06

GO项目的Appengine文件夹结构

已采纳

My app works fine using Appengine's development software. When I try to deploy, I get this error:

main.go:11: can't find import: "github.com/afoo/cohort/models"

My folder structure looks like this, where afoo is a subdirectory of a "standard" src/github.com setup, referenced in the GOPATH:

Folder structure

The app.yaml file is quite simple:

application: application-id
version: 1
runtime: go
api_version: go1

handlers:
  - url: /styles
    static_dir: styles

  - url: /scripts
    static_dir: scripts

  - url: /.*
    script: _go_app

The main.go file has the URL handler funcs I've defined, for instance:

func init() {

    // Register a handler for /.
    http.HandleFunc("/", MapNetworkHandler)
}

Module imports in main.go are fully qualified, and look like this:

    "github.com/afoo/cohort/models"

Google groups has a long discussion from 2014 that attempts to explain the proper folder setup. It's located here:

https://groups.google.com/forum/#!searchin/google-appengine-go/init/google-appengine-go/dNhqV6PBqVc/Pm2HBrhdCAAJ

From that discussion, I learned that I need to separate all modules (here, models, repository, and utils) from the main folder. But then there are some confusing mentions of other .yaml files that should go into each module folder, with no description of how they look, along with allusions to a skeleton init (.go) file that somehow imports everything else.

For better or worse, I learn by example, and I can't find a good example that would help me. I'd sure appreciate any detailed explanation of the proper folder structures and supplementary files that someone might know about.

Thanks for any help!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • dreamy1992 dreamy1992 5年前

    For code that is in your project folder use path relative to app.yaml.

    so if you have:

    - Folder: MyProject (can be inside GOPATH/github or any other place)
      - app.yaml
      - Folder: MyCode (package mycode)
        - code1.go
        - Folder: MySubCode (package mysubcode)
          - code2.go
    

    The imports should be like:

    import (
      "mycode"
      "mycode/mysubcode"
    )
    

    Note that you do not specify the github or anything else above the app.yaml for code that is is below or on the same level as app.yaml.

    Update: I keep project folder outside of GOPATH. Like:

    - ~ (user folder)
      - GOPATH folder
      - My GAE projects folder
         MyProject1
    

    This way it works fine with both importing from GOPATH's like "github/" and from paths relative to app.yaml like "myproject/"

    点赞 评论 复制链接分享

相关推荐