gpt4 book ai didi

go - Golang 如何在其他包文件中使用 struct?

转载 作者:IT王子 更新时间:2023-10-29 02:00:56 25 4
gpt4 key购买 nike

我是 Golang 的新手,需要一些帮助。

正如您在下面的代码中看到的,我正在尝试在 Golang 中创建 REST API。我使用 mux(Gorilla Mux)和 pq(PostgreSQL 驱动程序)作为第三方库。不想使用 ORM。

application.go 文件中,我有 InitializeRoutes 函数,其中包含所有可行路线的列表。 GetFactors 函数处理这些路径之一。我试图在另一个名为 factors.go 的文件中定义 GetFactors 函数逻辑。在 factors.go 文件中,我想使用在 application.go 中定义的 Application 结构。如何正确制作?现在你可以看到它们在不同的包中。这就是为什么 factors.go 文件看不到 Application 结构的原因。

项目结构:

main.go
application.go
controllers
factors.go

ma​​in.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
}

最佳答案

好吧,最后我决定重新设计项目结构。

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

ma​​in.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
}

关于go - Golang 如何在其他包文件中使用 struct?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54878991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com