如何从子目录中的控制器调用函数 - Golang

时间:2015-01-12 04:46:26

标签: go

我正在尝试创建一个Web应用程序,而不使用像Revel这样的框架,只使用Gorilla工具包,

到目前为止,我的应用程序结构如下:

/App
- Controllers
   - Index.go
- Views
   - Index.html
- Public
   - css
   - js
   - img
- main.go

我的main.go看起来像是:

package main

import (
    "github.com/gorilla/mux"
    "net/http"
)

func main() {

    r := mux.NewRouter()

    r.HandleFunc("/", Index)

    http.Handle("/", r)

    http.ListenAndServe(":8080", nil)
}

Index.go看起来像

package main

import (
    "fmt"
    "net/http"
)

func Index(res http.ResponseWriter, req *http.Request) {
    fmt.Println("Here")
}

但是当我go run main.go它说Index未定义时,我不确定如何从子目录中的另一个文件调用函数。任何信息都会非常感谢。

2 个答案:

答案 0 :(得分:0)

Go约会阻止了这一点。您必须将Index()保留在主程序包中。

一旦你有一些可以分离出来的代码,你就会创建一个子目录(包)并将其导入main。

https://golang.org/doc/effective_go.html

答案 1 :(得分:0)

Go code organization rules每个包需要一个目录。由于您的包main分为根目录和controllers目录,因此您的代码组织无法正常工作。

您可以将controllers打包,然后将其导入main,如果您要投放大型代码库,或者只是将控制器文件重新定位到根目录。