千家信息网

Golang中interface接口的作用是什么

发表于:2024-09-27 作者:千家信息网编辑
千家信息网最后更新 2024年09月27日,Golang中interface接口的作用是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。什么是interface接
千家信息网最后更新 2024年09月27日Golang中interface接口的作用是什么

Golang中interface接口的作用是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。


什么是interface接口

interface 是GO语言的基础特性之一。可以理解为一种类型的规范或者约定。它跟java,C# 不太一样,不需要显示说明实现了某个接口,它没有继承或子类或"implements"关键字,只是通过约定的形式,隐式的实现interface 中的方法即可。因此,Golang 中的 interface 让编码更灵活、易扩展。

如何理解go 语言中的interface ? 只需记住以下三点即可:

1. interface 是方法声明的集合
2. 任何类型的对象实现了在interface 接口中声明的全部方法,则表明该类型实现了该接口。
3. interface 可以作为一种数据类型,实现了该接口的任何对象都可以给对应的接口类型变量赋值。

注意:
1. interface 可以被任意对象实现,一个类型/对象也可以实现多个 interface
2. 方法不能重载,如 eat() eat(s string) 不能同时存在


接口实现

package mainimport "fmt"type Phone interface {    call()}type NokiaPhone struct {}func (nokiaPhone NokiaPhone) call() {    fmt.Println("I am Nokia, I can call you!")}type ApplePhone struct {}func (iPhone ApplePhone) call() {    fmt.Println("I am Apple Phone, I can call you!")}func main() {    var phone Phone    phone = new(NokiaPhone)    phone.call()    phone = new(ApplePhone)    phone.call()}

interface 查询

  如果接口A实现了接口B中所有方法,那么A可以转化为B接口。

if varName2, ok := varName1.(interface2|typeName); ok {    //此时 varName2 的类型由 interface1 转为 interface2,或者 varName1 不是 typeName 类型的变量  } else {    //不能转换 interface,或者 varName1 不是 typeName 类型的变量

interface{} 类型

  interface{} 类型没有声明任何一个方法,俗称空接口。interface{} 在我们需要存储任意类型的数值的时候相当有用,有点类似于C语言的void*类型。

package mainimport (    "fmt")func PrintAll(vals []interface{}) {    for _, val := range vals {        fmt.Println(val)    }}func main() {    names := []string{"stanley", "david", "oscar"}    vals := make([]interface{}, len(names))    for i, v := range names {        vals[i] = v    }    PrintAll(vals)}

然而,需要注意的是,[]T不能直接赋值给[]interface{}

        t := []int{1, 2, 3, 4}        var s []interface{} = t

编译时会输出下面的错误:

cannot use t (type []int) as type []interface {} in assignment

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

类型 接口 方法 对象 变量 语言 帮助 约定 作用 清楚 关键 关键字 内容 只是 只需 同时 基础 多个 子类 对此 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 海康平台服务器配置教程视频 iso软件开发工资 软件开发项目风险管理措施 加强网络安全工作的报告 国内网络安全案事件 如何护苗进行网络安全 阿里云服务器不见了怎么办 澄迈网络安全创新研究院 世界尖端网络技术 葫芦岛数据库修复 软件开发工程师助理的面试题 软件开发管理的11条真理谬论 中油优途登陆提示服务器请求出错 计算机网络技术单招考什么 郑州net软件开发如何收费 江宁网络安全保卫大队电话 领导让我做数据库 软件技术安卓软件开发 安徽正规软件开发特点 软件开发的目标 无限试驾连接服务器 数据库原理试验七触发器 数据库中关键字中的属性 小程序数据库的调用流程 金仓数据库密码复杂度在哪张表内 易语言 时间服务器 创业板网络安全行业龙头股票 长沙软件开发驻场价钱 用云服务器显卡挖矿 计算机网络技术大数据运维方向
0