您现在的位置是:群英 > 开发技术 > 编程语言
Go语言go接口怎么定义和实现,什么是空接口
Admin发表于 2022-07-04 17:38:01549 次浏览
这篇文章主要介绍了title,小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望大家通过这篇文章可以有所收获。


    概述

    Go 语言中的接口就是方法签名的集合,接口只有声明,没有实现,不包含变量。

    语法

    定义接口

    type [接口名] interface {
        方法名1(参数列表) 返回值列表   
        方法名2(参数列表) 返回值列表
        ...
    }
    

    例子

    type Isay interface{
      sayHi()
    }
    

    实现接口

    例子

    //定义接口的实现类
    type Chinese struct{}
    //实现接口
    func (_ *Chinese) sayHi() {
      fmt.Println("中国人说嗨")
    }
    
    //中国人
    type Chinese struct{}
    //美国人
    type Americans struct{}
    func (this *Chinese) sayHi()  {
      fmt.Println("中国人说嗨")
    }
    func (this Americans) sayHi()  {
      fmt.Println("美国人说hi")
    }
    //调用
    &Chinese{}.sayHi()
    Americans{}.sayHi()
    

    空接口

    在Go语言中,所有其它数据类型都实现了空接口。

    interface{}
    
    var v1 interface{} = 1
    var v2 interface{} = "abc"
    var v3 interface{} = struct{ X int }{1}
    

    如果函数打算接收任何数据类型,则可以将参考声明为interface{}。最典型的例子就是标准库fmt包中的Print和Fprint系列的函数:

    func Fprint(w io.Writer, a ...interface{}) (n int, err error)
    func Fprintf(w io.Writer, format string, a ...interface{})
    func Fprintln(w io.Writer, a ...interface{})
    func Print(a ...interface{}) (n int, err error)
    func Printf(format string, a ...interface{})
    func Println(a ...interface{}) (n int, err error)
    

    接口的组合

    一个接口中包含一个或多个接口

    //说话
    type Isay interface{
      sayHi()
    }
    //工作
    type Iwork interface{
      work()
    }
    
    //定义一个接口,组合了上述两个接口
    type IPersion interface{
      Isay
      Iwork
    }
    
    type Chinese struct{}
    
    func (_ Chinese) sayHi() {
      fmt.Println("中国人说中国话")
    }
    
    func (_ Chinese) work() {
    	fmt.Println("中国人在田里工作")
    }
    
    //上述接口等价于:
    type IPersion2 interface {
    	sayHi()
    	work()
    }
    

    总结

    interface类型默认是一个指针使用空接口可以保存任意值不能比较空接口中的动态值定义了一个接口,这些方法必须都被实现,这样编译并使用

    示例

    package main
    import "fmt"
    //中国话
    type Isay interface {
    	sayHi()
    }
    //工作
    type Iwork interface {
    	work()
    }
    //中国人
    type Chinese struct{}
    //美国人
    type Americans struct{}
    func (this *Chinese) sayHi() {
    	fmt.Println("中国人说嗨")
    }
    func (this Americans) sayHi() {
    	fmt.Println("美国人说hi")
    }
    type IPersion interface {
    	Isay
    	Iwork
    }
    func (_ Chinese) work() {
    	fmt.Println("中国人在田里工作")
    }
    func main() {
    	var chinese Isay = &Chinese{}
    	chinese.sayHi()
    	Americans{}.sayHi()
    	//接口组合
    	var ipersion IPersion = &Chinese{}
    	ipersion.sayHi()
    	ipersion.work()
    }
    



    以上就是关于Go语言go接口怎么定义和实现,什么是空接口的介绍啦,需要的朋友可以参考上述内容,希望对大家有帮助,欢迎关注群英网络,小编将为大家输出更多高质量的实用文章!

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

    标签: Go语言go接口
    相关信息推荐
    2022-05-06 18:01:25 
    摘要:比较方法:1、使用“array_diff_assoc($arr1,$arr2)”语句比较两个数组的键名和键值,返回一个差集数组;2、用“差集数组==[]”语句判断差集数组是否为空数组,如果是空数组,则表示进行比较的两个数组相等,反之不相等。
    2022-09-19 17:56:45 
    摘要:react受控组件和不受控组件的区别:1、受控组件依赖于状态,而非受控组件不受状态的控制;2、受控组件只有继承“React.Component”才会有状态,而非受控组件则不是只有继承才有状态;3、受控组件一般适用于需要动态设置初始值时,非受控组件一般用于无任何动态初始值信息时。
    2022-06-06 17:11:14 
    摘要:编程语言go是指Golang语言,是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言;Go的语法接近C语言,但对于变量的声明有所不同;Go支持垃圾回收功能,Go原生还提供了关联数组。
    云活动
    推荐内容
    热门关键词
    热门信息
    群英网络助力开启安全的云计算之旅
    立即注册,领取新人大礼包
    • 联系我们
    • 24小时售后:4006784567
    • 24小时TEL :0668-2555666
    • 售前咨询TEL:400-678-4567

    • 官方微信

      官方微信
    Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
    增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
    免费拨打  400-678-4567
    免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
    微信公众号
    返回顶部
    返回顶部 返回顶部