首页后端开发其他后端知识Go语言go接口怎么定义和实现,什么是空接口

Go语言go接口怎么定义和实现,什么是空接口

时间2024-03-26 19:40:03发布访客分类其他后端知识浏览971
导读:这篇文章主要介绍了title,小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望大家通过这篇文章可以有所收获。 概述 Go 语言中的接口就是方法签名的集合,接口只有声明,没有实现,不包含变量。 语法...
这篇文章主要介绍了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接口怎么定义和实现,什么是空接口的介绍啦,需要的朋友可以参考上述内容,希望对大家有帮助,欢迎关注网络,小编将为大家输出更多高质量的实用文章!

    声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


    若转载请注明出处: Go语言go接口怎么定义和实现,什么是空接口
    本文地址: https://pptw.com/jishu/653715.html
    PHP中怎样实现日期类型转换?有什么方法? Go语言中函数怎么定义,函数参数有哪些

    游客 回复需填写必要信息