我是 Golang 的新手,需要帮助。
您可以在下面的代码中看到,我正努力在Golang中创建REST API。我使用mux
(Gorilla Mux)和pq
(PostgreSQL驱动程序)作为第三方库。不想使用ORM。
在application.go
文件中,我具有InitializeRoutes
函数,其中列出了所有可用的路由。 GetFactors
函数处理这些路由之一。我正试图在另一个名为GetFactors
的文件中定义factors.go
函数逻辑。在factors.go
文件中,我想使用Application
中定义的application.go
结构。如何正确制作?现在,您可以看到它们位于不同的软件包中。因此,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"
)
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 / factors.go :
package controllers
import (
"net/http"
)
func (application *Application) GetFactors(rw http.ResponseWriter, request *http.Request) {
// code
}
答案 0 :(得分:2)
嗯,最后我决定重新设计项目结构。
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
}
routes / routes.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")
}
controllers / factors.go :
package controllers
var GetFactors = func(res http.ResponseWriter, req *http.Request) {
// code
}