簡體   English   中英

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

[英]How in Golang use struct in other package file?

我是Golang的新手 ,需要幫助。

如您在下面的代碼中看到的,我正試圖在Golang中創建REST API。 我使用mux (大猩猩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
}

好吧,最后我決定重新設計項目結構。

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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM