路由方法在主包文件中未定义
route method becomes undefined in main package file
我的代码如下图:
app.go
package main
import (
"github.com/go-martini/martini"
)
func main() {
app := martini.Classic()
app.Group("/books", func(r martini.Router) {
r.Get("/:id", getBooks)
r.Post("/new", newBook)
r.Put("/update/:id", updateBook)
r.Delete("/delete/:id", deleteBook)
})
app.RunOnAddr(":8080")
}
main.go
package main
import "github.com/go-martini/martini"
func getBooks() string {
return "get books api called"
}
func newBook() string {
return "Psot book api called"
}
func updateBook(params martini.Params) string {
return "put api called " + params["id"]
}
func deleteBook(params martini.Params) string {
return "delete api called " + params["id"]
}
但是不知何故,当我 运行 代码时,它给了我以下错误:
./app.go:16:17: undefined: getBooks
./app.go:17:18: undefined: newBook
./app.go:18:24: undefined: updateBook
./app.go:19:27: undefined: deleteBook
那么有什么办法可以解决这个问题呢?
项目结构如下:
goProject
---->app.go
---->main.go
有两个问题:
#1
您需要将两个文件放在同一个目录中,并使用相同的包名;即,main
.
#2
您需要编译并执行此目录中的所有文件,您可以使用以下方法之一:
go run ./...
执行该目录下的所有文件,或者,
go run app.go main.go
只执行这两个文件。
或者,按照@mkopriva 的建议,您可以将所有处理程序函数移动并导出到不同的包,我们称之为 package handlers
,然后将此包导入您的 main
应用程序。
我的代码如下图:
app.go
package main
import (
"github.com/go-martini/martini"
)
func main() {
app := martini.Classic()
app.Group("/books", func(r martini.Router) {
r.Get("/:id", getBooks)
r.Post("/new", newBook)
r.Put("/update/:id", updateBook)
r.Delete("/delete/:id", deleteBook)
})
app.RunOnAddr(":8080")
}
main.go
package main
import "github.com/go-martini/martini"
func getBooks() string {
return "get books api called"
}
func newBook() string {
return "Psot book api called"
}
func updateBook(params martini.Params) string {
return "put api called " + params["id"]
}
func deleteBook(params martini.Params) string {
return "delete api called " + params["id"]
}
但是不知何故,当我 运行 代码时,它给了我以下错误:
./app.go:16:17: undefined: getBooks
./app.go:17:18: undefined: newBook
./app.go:18:24: undefined: updateBook
./app.go:19:27: undefined: deleteBook
那么有什么办法可以解决这个问题呢?
项目结构如下:
goProject
---->app.go
---->main.go
有两个问题:
#1
您需要将两个文件放在同一个目录中,并使用相同的包名;即,main
.
#2
您需要编译并执行此目录中的所有文件,您可以使用以下方法之一:
go run ./...
执行该目录下的所有文件,或者,go run app.go main.go
只执行这两个文件。
或者,按照@mkopriva 的建议,您可以将所有处理程序函数移动并导出到不同的包,我们称之为 package handlers
,然后将此包导入您的 main
应用程序。