登录
首页 >  Golang >  Go问答

如何优化 gin golang 中包含大量路由的代码布局?

来源:stackoverflow

时间:2024-02-15 13:06:13 182浏览 收藏

Golang不知道大家是否熟悉?今天我将给大家介绍《如何优化 gin golang 中包含大量路由的代码布局?》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

问题内容

正如你所看到的,我有很多路线。我怎样才能以更好的方式构建/重构它?有更好的方法还是不需要?这段代码是我的请求处理程序的一部分,与数据库(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})
    })
}

正确答案


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

终于介绍完啦!小伙伴们,这篇关于《如何优化 gin golang 中包含大量路由的代码布局?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>