Go语言基础go接口用法示例详解

 更新时间:2021年11月17日 08:50:48   作者:枫少文  
这篇文章主要为大家介绍了Go语言基础关于go接口的用法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,在日升职加薪

在这里插入图片描述

概述

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接口用法示例详解的详细内容,更多关于Go 语言基础的资料请关注脚本之家其它相关文章!

相关文章

  • Go语言init函数详解

    Go语言init函数详解

    今天小编就为大家分享一篇关于Go语言init函数详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • 细说Go语言中空结构体的奇妙用途

    细说Go语言中空结构体的奇妙用途

    Go语言中,我们可以定义空结构体,即没有任何成员变量的结构体,使用关键字 struct{} 来表示。这种结构体似乎没有任何用处,但实际上它在 Go 语言中的应用非常广泛,本文就来详解讲讲
    2023-05-05
  • golang服务报错: write: broken pipe的解决方案

    golang服务报错: write: broken pipe的解决方案

    在开发在线客服系统的时候,看到日志里有一些错误信息,下面这篇文章主要给大家介绍了关于golang服务报错: write: broken pipe的解决方案,需要的朋友可以参考下
    2022-09-09
  • Go文件操作(新建打开写入读取删除关闭)学习笔记

    Go文件操作(新建打开写入读取删除关闭)学习笔记

    这篇文章主要为大家介绍了Go文件操作(新建打开写入读取删除关闭)学习笔记,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Go interface 接口的最佳实践经验分享

    Go interface 接口的最佳实践经验分享

    go 的接口在go的编程里面用的十分频繁,尤其是空接口的使用,因为有了接口,才使得Go语言变得异常的强大,今天给大家介绍下Go interface 接口的最佳实践经验分享,感兴趣的朋友一起看看吧
    2022-04-04
  • Golang实现四种负载均衡的算法(随机,轮询等)

    Golang实现四种负载均衡的算法(随机,轮询等)

    本文介绍了示例介绍了Golang 负载均衡的四种实现,主要包括了随机,轮询,加权轮询负载,一致性hash,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • go如何终止多个for select循环嵌套的方法

    go如何终止多个for select循环嵌套的方法

    当您想从嵌套循环中中断,从select内部终止循环时,标记的中断非常有用,本文主要介绍了go如何终止多个for select循环嵌套的方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Golang实践笔录之读取yaml配置文件

    Golang实践笔录之读取yaml配置文件

    YAML是YAML Ain't a Markup Language的缩写,YAML不是一种标记语言,相比JSON格式的方便,这篇文章主要给大家介绍了关于Golang实践笔录之读取yaml配置文件的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • Go实现分布式唯一ID的生成之雪花算法

    Go实现分布式唯一ID的生成之雪花算法

    本文主要介绍了Go实现分布式唯一ID的生成之雪花算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • Go 实现 WebSockets之创建 WebSockets

    Go 实现 WebSockets之创建 WebSockets

    这篇文章主要介绍了Go 实现 WebSockets之创建 WebSockets,文章主要探索 WebSockets,并简要介绍了它们的工作原理,并仔细研究了全双工通信,想了解更多相关内容的小伙伴可以参考一下
    2022-04-04

最新评论