【问题标题】:How can i refactor/organise my routes in gin golang that contains a lot of routes?如何在包含大量路线的 gin golang 中重构/组织我的路线?
【发布时间】:2022-10-26 00:17:39
【问题描述】:

如您所见,我有很多路线。我怎样才能以更好的方式构造/重构它?有更好的方法还是不需要?此代码是我的请求处理程序的一部分,与数据库(mongodb)通信。我在 gin golang github 上找不到有关此的文档。如果有办法缩短它,那就太好了。

package routes

import (
    "fmt"
    "net/http"
    "strconv"
    "foldername/db"
    "github.com/gin-gonic/gin"
)

func UserRoute(router *gin.Engine) {
    router.GET("/address/:query", func(c *gin.Context) {
        param := c.Param("query")
        page := c.Request.URL.Query().Get("page")
        pageStr, err := strconv.Atoi(page)
        if err != nil {
            fmt.Println(err)
        }

        query, err := db.ReturnSingleAddress(param)
        if err != nil {
            fmt.Println(err)
        }

        countTransactions, err := db.CountTransactions(param)
        if err != nil {
            fmt.Println(err)
        }

        transactions, err := db.ReturnTransactions(param, pageStr, 15)
        if err != nil {
            fmt.Println(err)
        }
        c.JSON(http.StatusOK, gin.H{"address": query, "transactions": transactions, "total_transactions": countTransactions})
    })
    router.GET("/", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{
            "datetime":     db.ReturnDateTime(),
            "countwallets": db.CountWallets(),
        })
    })
    router.GET("/tx/:query", func(c *gin.Context) {
        value := c.Param("query")
        query, err := db.ReturnSingleTransfer(value)
        if err != nil {
            fmt.Println(err)
        }
        c.JSON(http.StatusOK, gin.H{"response": query})
    })
    router.GET("/coinbase/:query", func(c *gin.Context) {
        value := c.Param("query")
        query, err := db.ReturnSingleTransfer(value)
        if err != nil {
            fmt.Println(err)
        }
        c.JSON(http.StatusOK, gin.H{"response": query})
    })
    router.GET("/rank/:query", func(c *gin.Context) {
        value := c.Param("query")
        query, err := db.ReturnRankAddress(value)
        if err != nil {
            fmt.Println(err)
        }
        c.JSON(http.StatusOK, gin.H{"response": query})
    })
    router.GET("/richlist", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{"richlist": db.ReturnRichlist()})
    })
    router.GET("/blocks", func(c *gin.Context) {
        query, err := db.ReturnLatestBlocks()
        if err != nil {
            fmt.Println(err)
        }
        c.JSON(http.StatusOK, gin.H{"response": query})
    })
    router.GET("/validators", func(c *gin.Context) {
        query, err := db.ReturnValidators()
        if err != nil {
            fmt.Println(err)
        }
        c.JSON(http.StatusOK, gin.H{"response": query})
    })
    router.GET("/transactions", func(c *gin.Context) {
        query, err := db.ReturnLatestTransactions()
        if err != nil {
            fmt.Println(err)
        }
        c.JSON(http.StatusOK, gin.H{"response": query})
    })
    router.GET("/contracts", func(c *gin.Context) {
        query, err := db.ReturnContracts()
        if err != nil {
            fmt.Println(err)
        }
        c.JSON(http.StatusOK, gin.H{"response": query})
    })
    router.GET("/alltransactions/:query", func(c *gin.Context) {
        value := c.Param("query")
        query, err := db.ReturnAllTransactionsByAddress(value)
        if err != nil {
            fmt.Println(err)
        }
        c.JSON(http.StatusOK, gin.H{"response": query})
    })
    router.GET("/walletdistribution/:query", func(c *gin.Context) {
        value := c.Param("query")
        wallets, err := strconv.ParseUint(value, 10, 64)
        if err != nil {
            fmt.Println(err)
        }
        query, err := db.ReturnWalletDistribution(wallets)
        if err != nil {
            fmt.Println(err)
        }
        c.JSON(http.StatusOK, gin.H{"response": query})
    })
    router.GET("/blockhashbn/:query", func(c *gin.Context) {
        value := c.Param("query")
        queryHash, err := db.ReturnHashToBlockNumber(value)
        if err != nil {
            fmt.Println(err)
        }
        c.JSON(http.StatusOK, gin.H{"response": queryHash})
    })
    router.GET("/block/:query", func(c *gin.Context) {
        value := c.Param("query")
        intValue, err := strconv.ParseUint(value, 10, 64)
        if err != nil {
            fmt.Println(err)
        }
        query, err := db.ReturnSingleBlock(intValue)
        if err != nil {
            fmt.Println(err)
        }
        c.JSON(http.StatusOK, gin.H{"response": query})
    })
    router.GET("/contractcode/:query", func(c *gin.Context) {
        value := c.Param("query")
        query, err := db.ReturnContractCode(value)
        if err != nil {
            fmt.Println(err)
        }
        c.JSON(http.StatusOK, gin.H{"response": query})
    })
}

【问题讨论】:

    标签: go routes


    【解决方案1】:

    就个人而言,我喜欢将我的处理程序函数移动到代表 API 的单独文件和目录中,这样您只需要引用处理程序而不是使用内联函数。
    在您的情况下,我建议重组您的路径,以便您可以将它们分组到公共根路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-07
      • 2016-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多