метод маршрута становится неопределенным в основном файле пакета - PullRequest
0 голосов
/ 20 марта 2019

Мой код такой, как показано ниже:

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 Ответ

3 голосов
/ 20 марта 2019

Есть две проблемы:

# 1

Вам необходимо иметь оба файла в одном каталоге с одинаковым именем пакета; а именно main.

# 2

Вам необходимо скомпилировать и выполнить все файлы в этом каталоге, что вы можете сделать, используя:

  • go run ./..., чтобы выполнить все файлы в этом каталоге, или,

  • go run app.go main.go, чтобы выполнить только эти два файла.


В качестве альтернативы, как предлагает @mkopriva, вы можете переместить и экспортировать все функции-обработчики в другой пакет, назовем его package handlers и просто импортировать этот пакет в ваше приложение main.

...