问题
My code is as shown below :
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"]
}
But somehow when I run the code , it gives me the following error :
./app.go:16:17: undefined: getBooks
./app.go:17:18: undefined: newBook
./app.go:18:24: undefined: updateBook
./app.go:19:27: undefined: deleteBook
So is there any way to solve this problem?
the project structure is as follows:
goProject
---->app.go
---->main.go
回答1:
There are two problems:
#1
You need to have both files in the same directory with the same package name; namely, main
.
#2
You need to compile and execute all files in this directory which you can do either using:
go run ./...
to execute all files in this directory, or,go run app.go main.go
to execute just these two files.
Alternatively, as suggested by @mkopriva, you can move and export all handler functions to a different package, let's call it package handlers
and just import this package in your main
app.
来源:https://stackoverflow.com/questions/55260250/route-method-becomes-undefined-in-main-package-file