登录
首页 >  Golang >  Go问答

在 Golang 中传递 interface{} 或 []interface{}

来源:Golang技术栈

时间:2023-04-11 17:27:26 406浏览 收藏

一分耕耘,一分收获!既然打开了这篇文章《在 Golang 中传递 interface{} 或 []interface{}》,就坚持看下去吧!文中内容包含golang等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

问题内容

有了这个片段,为什么它允许 interface{} 传递给函数而不是 []interface。有什么区别?我知道错误的含义(已将其注释到函数中),但我不确定错误的含义。

https://play.golang.org/p/689R_5dswFX

package main

type smsSendRequest struct {
    Recipients     string `json:"recipients"`
}

// func action(pass interface{}) {
//     //works
// }

func action(pass []interface{}) {
    //cannot use data (type *smsSendRequest) as type []interface {} in argument to action
}

func main() {
    to := "15551234567"
    var data = &smsSendRequest{
        Recipients:     to,
    }
    action(data)
}

正确答案

该类型interface{}可以用作非常通用的类型,允许将任何其他类型分配给它。

因此,如果一个函数接收interface{}到 ,您可以将任何值传递给它。

这是因为在 Go 中,要满足接口的类型,它必须只实现接口声明的所有方法。

由于interface{}是一个空接口,任何类型都会满足它。

另一方面,要满足[]interface{}它的类型必须是空接口的实际切片。

因此,如果您需要一个可以接收任何值的通用函数,只需interface{}按照您在示例中显示的方式使用即可。

请注意,这interface{}将允许您传递值或指针引用,因此您可以将指针或值模糊地传递给该函数。

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

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