Go语言入门7(interface 接口)

这篇具有很好参考价值的文章主要介绍了Go语言入门7(interface 接口)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

接口

​ 接口类型是对其它类型行为的抽象和概括,因为接口类型不会和特定的实现细节绑定在一 起,通过这种抽象的方式我们可以让我们的函数更加灵活和更具有适应能力

接口的特点

  1. 可以包含0个或多个方法的签名
  2. 只定义方法的签名,不包含实现
  3. 实现接口不需要显式的声明,只需实现相应方法即可

接口实现

​ 接口里没有具体的方法实现,只有方法声明!!!

type ShowInfo interface {
    ShowColor()
    ShowArea()
}

​ 如果一个变量含有了多个interface类型的方法,那么这个变量就实现了多个接口,如果一个变量只含有了1个interface的方部分方法,那么这个变量没有实现这个接口

// 定义一个结构体Triangle,实现上述的两个方法
type Triangle struct {
	Color   string
	Padding string
	Area    int
}

func (triangle Triangle) ShowArea() {
	fmt.Printf("Triangle Area: %d\n", triangle.Area)
}
func (triangle Triangle) ShowColor() {
	fmt.Printf("Triangle Color: %s\n", triangle.Color)
}

// 定义一个结构体Circle,只实现一个方法
// 因为没有实现上述接口的所有方法,因此没有实现这个接口!!!
type Circle struct {
	Color   string
	Padding string
	Area    int
}

func (circle Circle) ShowArea() {
	fmt.Printf("Circle Area: %d\n", circle.Area)
}

接口使用

​ 接口类型为一般类型

func main() {
	circle01 := Circle{
		Color:   "Red",
		Padding: "24px",
		Area:    300,
	}
	triangle01 := Triangle{
		Color:   "Yellow",
		Padding: "12px",
		Area:    2000,
	}
	Showinfo(circle01) // 传入的是Circle 调用的就是Circle里的方法
	Showinfo(triangle01) // 传入的是Triangle 调用的就是Triangle里的方法
}
// 两种不同的结构体使用接口的方法是一样的,接口自动判断调用各自的方法
func Showinfo(tmp ShowInfo) {
	tmp.ShowArea()
	tmp.ShowColor()
}

接口断言

​ 因为接口为一般类型,如果我们需要知道传进去的到底是什么类型,那么就需要用(type-switch-case)来进行接口断言

func Showinfo(tmp ShowInfo) {
    // 接口断言
	switch tmp.(type) {
        // 如果传进去的是Triangle
        case Triangle:
            fmt.Printf("These are Triangle's info:\n")
        // 如果传进去的是Circle
        case Circle:
            fmt.Printf("These are Circle's info:\n")
	}
	tmp.ShowArea()
	tmp.ShowColor()
}

接口嵌套

​ 接口于接口直接也可以进行嵌套文章来源地址https://www.toymoban.com/news/detail-412329.html

// 接口ShowColor
type ShowColor interface {
	ShowColor()
}
// 接口ShowArea
type ShowArea interface {
	ShowArea()
}
// 接口ShowInfo,嵌套了上述两个接口
type ShowInfo interface {
	ShowArea
	ShowColor
}

//嵌套接口的使用
func Showinfo(tmp ShowInfo) {
	switch tmp.(type) {
	case Triangle:
		fmt.Printf("These are Triangle's info:\n")
	case Circle:
		fmt.Printf("These are Circle's info:\n")
	}
	tmp.ShowArea()
	tmp.ShowColor()
}

到了这里,关于Go语言入门7(interface 接口)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【TypeScript】接口类型 Interfaces 的使用理解

    导语 : 什么是 类型接口 ? 在面向对象语言中 ,接口 (Interfaces) 是一个很重要的概念,它是对行为的抽象,而具体如何行动需要由类(classes)去实现(implement)。TypeScript 中的 类型接口 是一个非常灵活的概念,除了可用于 对类的一部分行为进行抽象 以外,也常用于对「

    2024年02月15日
    浏览(53)
  • 【TypeScript】TS接口interface类型(三)

    一、前言 TypeScript的核心原则之一是对值所具有的结构进行类型检查。 它有时被称做“鸭式辨型法”或“结构性子类型化”。 在TypeScript里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。这些方法都应该是抽象的,需要由具体的类去实现,然后第三方

    2024年02月14日
    浏览(46)
  • go语言(十三)-----interface

    一、Interface 通用万能类型 空接口 int,string,float,struct都实现了interface 都可以用interface{}类型,引用任意的数据类型

    2024年01月23日
    浏览(34)
  • golang any 之中的类型及 interface 接口

    在 golang 之中 any 类型,从字面意思上看是任意类型,这很类似我们在 C#、C++ 之中的任意指针类型 void*(原生),C# 之中诡异的 object。 any 是一个接口类型,其语法声明为: 即 interface{} 等于 any,这是一种类似 C++ 之中语法为: using 别名 = 类型; 别名定义方式,C# 这块只允许

    2024年01月23日
    浏览(48)
  • 100天精通Golang(基础入门篇)——第5天: Go语言中的数据类型学习

    🌷 博主 libin9iOak带您 Go to Golang Language.✨ 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批

    2024年02月08日
    浏览(47)
  • go语言终端交叉编译的事项windows编译其它平台软件包

    windows编译窗口目前分为 cmd窗口 ,powershell窗口,这两个里面运行的命令不一样。 1.cmd窗口编译; 在windows10之前的系统版本上使用cmd命令行可以使用命令 CMD命令行中 在CMD命令行中编译(示例编译64位linux程序),【打开一个cmd窗口一行行执行下面的命令;】 // 设置Linux编译环

    2024年02月16日
    浏览(70)
  • Scala的特质trait与java的interface接口的区别,以及Scala特质的自身类型和依赖注入

    Scala中的特质(trait)和Java中的接口(interface)在概念和使用上有一些区别: 默认实现:在Java中,接口只能定义方法的签名,而没有默认实现。而在Scala的特质中,除了可以定义方法签名外,还可以定义方法的具体实现。这样,在混入(mix in)特质的类中,可以直接使用特质

    2024年02月10日
    浏览(37)
  • python教程 入门学习笔记 第6天 数据类型转换 字符串转换成数值 数值之间互转 其它类型转字符串

    s1=\\\"188\\\" #字符串 ns1=int(s1) #转换成整型数值 print(ns1+8) #打印数值结果 s1=\\\"3.14\\\" #字符串 ns1=float(s1) #转换成浮点型数值 print(ns1+3) #打印数值结果(数值结果为6.140000000000001,出现误差,后面讲解决办法) print(type(ns1)) #获取新数值的数据类型属性 z1=78 nz1=float(z1) print(nz1) #打印结果

    2024年02月14日
    浏览(75)
  • go数据类型-空结构体、空接口、nil

    有经验的开发人员都知道,所有的空结构体是指向一个 zerobase的地址,而且大小为0 一般用来作结合map作为set 或者 在channel中 传递信号。 能看到当一个空结构体中,包含了其他类型的变量,就不指向 zerobase。 go中的接口都是隐式的,增加的封装的灵活性,也为阅读源码增加了

    2024年02月05日
    浏览(59)
  • 【Go】Go 语言教程--数据类型(四)

    Go 语言教程–介绍(一) Go 语言教程–语言结构(二) Go 语言教程–语言结构(三) 在 Go 编程语言中,数据类型用于声明函数和变量。 数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。

    2024年02月12日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包