मैंने अभी गो सीखना शुरू किया है और मैं अपना खुद का आरईएसटी एपीआई बनाना चाहता हूं।

समस्या सरल है: मैं अपने एपीआई के मार्गों को एक अलग फ़ाइल में रखना चाहता हूं उदाहरण के लिए: मार्ग/उपयोगकर्ता। फिर मैं "मुख्य" फ़ंक्शन में शामिल करता हूं और उन मार्गों को पंजीकृत करता हूं।

इको/गो में रेस्टएपीआई के उदाहरणों की एक बड़ी संख्या है, लेकिन उन सभी के पास मुख्य () फ़ंक्शन में मार्ग हैं।

मैंने कुछ उदाहरण/जीथब स्टार्टर किट की जांच की लेकिन ऐसा लगता है कि मुझे कोई समाधान नहीं मिल रहा है जो मुझे पसंद है।

func main() {
    e := echo.New()

    e.GET("/", func(c echo.Context) error {
        responseJSON := &JSResp{Msg: "Hello World!"}
        return c.JSON(http.StatusOK, responseJSON)
    })

     //I want to get rid of this
    e.GET("users", UserController.CreateUser)
    e.POST("users", UserController.UpdateUser)
    e.DELETE("users", UserController.DeleteUser)

    //would like something like
    // UserRoutes.initRoutes(e)

    e.Logger.Fatal(e.Start(":1323"))
}

//UserController.go
//CreateUser 
func CreateUser(c echo.Context) error {
    responseJSON := &JSResp{Msg: "Create User!"}
    return c.JSON(http.StatusOK, responseJSON)
}

//UserRoutes.go
func initRoutes(e) { //this is probably e* echo or something like that
//UserController is a package in this case that exports the CreateUser function
    e.GET("users", UserController.CreateUser) 
    return e;
}

क्या इसे बनाने का कोई आसान तरीका है? नोड.जेएस से आ रहा है और अभी भी कुछ वाक्यविन्यास त्रुटियां हैं, उन्हें हल करेगा, लेकिन मैं इस समय अपने कोड की वास्तुकला के साथ संघर्ष कर रहा हूं।

-2
Alexandru Beșe 21 अगस्त 2019, 19:11

1 उत्तर

सबसे बढ़िया उत्तर

मैं अपने एपीआई के मार्गों को एक अलग फ़ाइल में रखना चाहता हूं उदाहरण के लिए: मार्ग/उपयोगकर्ता। फिर मैं "मुख्य" फ़ंक्शन में शामिल करता हूं और उन मार्गों को पंजीकृत करता हूं।

यह संभव है, बस अपनी फाइलों को routes पैकेज में ऐसे फ़ंक्शन घोषित करें जो *echo.Echo का उदाहरण लें और उन्हें हैंडलर पंजीकृत करें।

// routes/users.go

func InitUserRoutes(e *echo.Echo) {
    e.GET("users", UserController.CreateUser)
    e.POST("users", UserController.UpdateUser)
    e.DELETE("users", UserController.DeleteUser)
}


// routes/posts.go

func InitPostRoutes(e *echo.Echo) {
    e.GET("posts", PostController.CreatePost)
    e.POST("posts", PostController.UpdatePost)
    e.DELETE("posts", PostController.DeletePost)
}

और फिर main.go में

import (
     "github.com/whatever/echo"
     "package/path/to/routes"
)

func main() {
    e := echo.New()
    routes.InitUserRoutes(e)
    routes.InitPostRoutes(e)
    // ...
}

ध्यान दें कि InitXxx फ़ंक्शंस को आपके initRoutes उदाहरण के विपरीत ऊपरी केस अक्षर से शुरू करने की आवश्यकता है जिसमें इसका पहला अक्षर निचले मामले में है। ऐसा इसलिए है क्योंकि छोटे अक्षरों वाले पहले अक्षर वाले पहचानकर्ता निर्यात किए गए हैं, जो उन्हें अपने स्वयं के पैकेज के बाहर से पहुंच योग्य नहीं बनाता है। एक और तरीका रखो, एक आयातित पहचानकर्ता को संदर्भित करने में सक्षम होने के लिए आपको इसे ऊपरी केस अक्षर से शुरू करके निर्यात करना होगा।

यहां और अधिक: https://golang.org/ref/spec#Exported_identifiers

1
mkopriva 21 अगस्त 2019, 16:43