@nurzhannogerbek

Как правильно использовать структуры в файлах одного пакета?

Здравствуйте, товарищи! Помогите пожалуйста разобраться.

Пытаюсь создать REST API на Golang. Использую сторонние пакеты mux (Gorilla Mux) and pq (PostgreSQL driver) для этих целей. ORM не собираюсь использовать.

Столкнулся со следующей проблемой. В файле factors.go пытаюсь использовать структуру Application, которая была описана в файле application.go. Файлы factors.go и application.go относятся к одному пакету. Как правильно в файле application.go вызвать функцию GetFactors? Как в файле factors.go правильно использовать структуру Application? Возможно нужно сделать редизайн?!

Структура проекта выглядит следующим образом:
main.go
application.go
controllers
    factors.go


main.go:
package main

func main()  {
	application := Application{}
	application.Initialization()
	application.Run("localhost:8000")
}


application.go:
package main

import (
	"database/sql"
	"github.com/gorilla/mux"
	"log"
	"net/http"
	"rest-api/configurations"
	"rest-api/controllers"
)

type Application struct {
	Router *mux.Router
	Database *sql.DB
}

func (application *Application) Initialization() {
	var err error
	application.Database, err = configurations.DatabaseConnection()
	if err != nil {
		log.Fatal(err)
	}
	application.Router = mux.NewRouter()
	application.Router.StrictSlash(true)
	application.InitializeRoutes()
}

func (application *Application) Run(address string) {
	log.Fatal(http.ListenAndServe(address, application.Router))
}

func (application *Application) InitializeRoutes() {
	application.Router.HandleFunc("/api/factors", controllers.GetFactors).Methods("GET")
	// Остальной код
}


factors.go:
package main

import (
	"net/http"
)

func (application *Application) GetFactors(rw http.ResponseWriter, request *http.Request) {
	// Остальной код
}
  • Вопрос задан
  • 114 просмотров
Пригласить эксперта
Ответы на вопрос 1
VlastV
@VlastV
Ведущий разработчик – практик
`factors.go` не может быть частью пакета `main`, так как находиться в пакете `controllers`.

И есть подозрение, что код все равно не соберется, так как модуль `main` в файле `application.go` зависит от модуля `controllers` файла `factors.go`, при этом модуль `controllers` в файле `factors.go` зависит от модуля `main` файла `application.go`. Получается рекурсия, и код не сможет собраться.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы