登录
首页 >  Golang >  Go问答

断言 gin.HandlerFunc 接口失败

来源:stackoverflow

时间:2024-03-15 21:30:23 393浏览 收藏

**文章首段摘要** 本文探讨了将 `func(*gin.Context)` 类型函数转换为 `gin.HandlerFunc` 时遇到的断言失败问题。尽管这两个类型在一定程度上是兼容的,但它们本质上是不同的。`func(*gin.Context)` 并非 `gin.HandlerFunc`,因此直接断言会失败。 为了成功转换,需要使用自定义函数 `handlerFunc`,该函数根据传入参数的类型进行类型转换。`handlerFunc` 首先尝试将参数转换为 `func(*gin.Context)`,然后尝试转换为 `gin.HandlerFunc`。如果转换成功,则返回相应的函数类型;否则,引发错误。

问题内容

package main

import (
    "fmt"

    "github.com/gin-gonic/gin"
)

func Foo(ctx *gin.Context) {}

func main() {
    var v interface{}
    v = Foo
    _, ok := v.(func(*gin.Context))
    fmt.Println(ok) // true
    _, ok = v.(gin.HandlerFunc)
    fmt.Println(ok) // false
}

我有一个接口类型的函数,想将其转换为gin.handlerfunc,但我不明白的是为什么第二次断言失败,希望得到答案,谢谢


正确答案


尽管 gin.HandlerFuncfunc(*gin.context) 对应的是 assignable,反之亦然,但它们是不同的类型。 func(*gin.context) 不是 gin.handlerfunc

使用此代码从 interface{} 获取 gin.handlerfunc

func handlerFunc(v interface{}) gin.HandlerFunc {
    switch v := v.(type) {
    case func(*gin.Context):
        return v
    case gin.HandlerFunc:
        return v
    default:
        panic("unexpected type")
    }
}

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

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