为了账号安全,请及时绑定邮箱和手机立即绑定

通过提供键从 map[string]interface{} 调用函数

通过提供键从 map[string]interface{} 调用函数

Go
长风秋雁 2021-10-18 16:12:02
我希望能够将函数名称传递给 gin.Engine 路由处理程序。我有以下代码;// status servicetype StatusService struct {    App *gin.Engine}func (s *StatusService) Ping(ctx *gin.Context) {    ctx.JSON(200, gin.H{        "message": "pong",    })}app := gin.Default()// define servicesstatusService := &services.StatusService{    App: app,}ss := make(map[string]interface{})ss["auth"] = statusServiceapp.GET("/ping", ss["auth"].Ping)编译器给出以下错误;./app.go:60: ss["auth"].Ping undefined (type interface {} has no field or method Ping)关于如何解决这个问题的任何想法?
查看完整描述

1 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

interface{}几乎适用于任何类型,问题是您未能断言该事物是哪种类型。在这种情况下,您将需要类似...的东西ss["auth"].(*StatusService).Ping(myCtxInstance)。这个答案有一个更彻底的例子

结合其他事情;如果您的实际用例与您的示例一样简单,只需停止您正在做的事情并添加func(ctx *gin.Context)第二个参数即可。此外,根据您要使用的函数的性质(例如,如果它们都具有相同的 args 和返回类型),那么您可能希望为委托使用第二个 argmap[string]func(argumentType)会更合适。

您当前拥有的设计将所有错误推送到运行时,这显然不如您从我上面提到的任何一个选项中获得的编译时安全性更可取。


查看完整回答
反对 回复 2021-10-18
  • 1 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信