Как в Golang использовать struct в другом файле пакета? - PullRequest
0 голосов
/ 26 февраля 2019

Я новичок в Golang и мне нужна помощь.

Как видно из кода ниже, я пытаюсь создать REST API в Golang.Я использую mux (Gorilla Mux) и pq (драйвер PostgreSQL) в качестве сторонних библиотек.Не хочу использовать ORM.

Внутри application.go файла. У меня есть функция InitializeRoutes со списком всех доступных маршрутов.GetFactors функция обрабатывает один из этих маршрутов.Я пытаюсь определить GetFactors функциональную логику в другом файле с именем factors.go.Внутри файла factors.go я хочу использовать структуру Application, которая была определена в application.go.Как сделать это правильно?Прямо сейчас, как вы можете видеть, они находятся в разных пакетах.Вот почему файл factors.go не видит Application struct.

Структура проекта :

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"
)

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", application.GetFactors).Methods("GET")
    // other code
}

controllers / factor.go :

package controllers

import (
    "net/http"
)

func (application *Application) GetFactors(rw http.ResponseWriter, request *http.Request) {
    // code
}

1 Ответ

0 голосов
/ 26 февраля 2019

Ну, наконец, я решил изменить структуру проекта.

main.go
routes
    routes.go
controllers
    factors.go
models
    factors.go

main.go :

import (
    "your_project_name/routes"
)

func main()  {
    // code
    router := mux.NewRouter()
    routes.Use(router)
    // code
}

routs / rout.go:

package routes

import (
    "github.com/gorilla/mux"
    "your_application_name/controllers"
)

func Use(router *mux.Router) {
    router.HandleFunc("/api/factors", controllers.GetFactors).Methods("GET")
}

контроллеры / factor.go :

package controllers

var GetFactors = func(res http.ResponseWriter, req *http.Request) {
    // code
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...