Я довольно новичок в Golang и пытаюсь сделать простую работу приложения api REST.Как правильно импортировать пакет из подкаталога в Голанге?
Первоначально все было в порядке, так как у меня был весь код в том же каталоге под пакетом main
.
Но теперь я нахожусь на этапе, когда мне нужно начать рефакторинг кода в подкаталоги и пакеты. К сожалению, я не смог скомпилировать приложение успешно.
Мой GOPATH
установлен на: ~/.workspace
Текущее приложение по адресу: ~/.workspace/src/gitlab.com/myapp/api-auth
Это как моя текущая организация код:
Вот мой main.go
package main
import (
"net/http"
"os"
"strings"
"github.com/gorilla/context"
"github.com/justinas/alice"
"gopkg.in/mgo.v2"
"gitlab.com/myapp/api-auth/middlewares"
)
func main() {
privateKey := []byte(strings.Replace(os.Getenv("JWT_KEY"), "\\n", "\n", -1))
conn, err := mgo.Dial(os.Getenv("MONGO_CONN"))
if err != nil {
panic(err)
}
defer conn.Close()
conn.SetMode(mgo.Monotonic, true)
ctx := appContext{
conn.DB(os.Getenv("MONGO_DB")),
privateKey,
}
err = ctx.db.C("users").EnsureIndex(mgo.Index{
Key: []string{"username"},
Unique: true,
Background: true,
Sparse: false,
})
if err != nil {
panic(err)
}
commonHandlers := alice.New(LoggingHandler, context.ClearHandler, RecoveryHandler, AcceptHandler, ContentTypeHandler)
router := NewRouter()
router.Post("/users", commonHandlers.Append(BodyParserHandler(UserResource{})).ThenFunc(ctx.userCreationHandler))
router.Post("/sessions", commonHandlers.Append(BodyParserHandler(UserResource{})).ThenFunc(ctx.sessionCreationHandler))
http.ListenAndServe(":8080", router)
}
type appContext struct {
db *mgo.Database
privateKey []byte
}
Вот один из миддл eware accept.go
(Остальная часть промежуточного слоя построены аналогично)
package middlewares
import "net/http"
// AcceptHandler ensures proper accept headers in requests
func AcceptHandler(next http.Handler) http.Handler {
fn := func(w http.ResponseWriter, r *http.Request) {
if r.Header.Get("Accept") != "application/vnd.api+json" {
writeError(w, errNotAcceptable)
return
}
next.ServeHTTP(w, r)
}
return http.HandlerFunc(fn)
}
Это ошибка я получаю, когда я бегу go build
от корня моего приложения.
# gitlab.com/utiliti.es/api-auth
./main.go:11: imported and not used: "gitlab.com/myapp/api-auth/middlewares"
./main.go:42: undefined: LoggingHandler
./main.go:42: undefined: RecoveryHandler
./main.go:42: undefined: AcceptHandler
./main.go:42: undefined: ContentTypeHandler
./main.go:45: undefined: BodyParserHandler
./main.go:46: undefined: BodyParserHandler
Вы ссылаетесь на символы (функции, переменные, типы) из других пакетов по разным именам с этим именем пакета - например. 'Middlewares.AcceptHandler'. Вот почему они кажутся неопределенными, а middlewares «не используется». – elithrar