Go语言 Interface(接口)

2024-04-27 16:44
文章标签 go interface 接口 语言

本文主要是介绍Go语言 Interface(接口),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基本介绍

  1. Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。
  2. 接口可以让我们将不同的类型绑定到一组公共的方法上,从而实现多态和灵活的设计。
  3. Go 语言中的接口是隐式实现的,也就是说,如果一个类型实现了一个接口定义的所有方法,那么它就自动地实现了该接口。
  4. 一个类型可以实现多个接口,一个接口也可以被多个类型实现。

基本使用

	type Animal interface {Run()Say()}type Horse struct {Name string}type Dog struct {Name string}func (h *Horse) Run(){fmt.Println("Horse Run")}func (h *Horse) Say(){fmt.Println("Horse Say")}func (d *Dog) Run(){fmt.Println("Dog Run")}func (d *Dog) Say(){fmt.Println("Dog Say")}func animalAction(animal Animal){animal.Run()animal.Say()}func main(){horse := &Horse{"Horse",}dog := &Dog{"dog",}fish := &Fish{"fish",}animalAction(horse) // Horse Run Horse SayanimalAction(dog)// Dog Run Dog Say}

代码解释

  1. 我们先定义了一个动物的接口,接口有两个方法签名
  2. 定义了马的结构体,并实现了接口的两个方法,所以这个马的结构体实现了动物接口
  3. 定义了狗的结构体,并实现了接口的两个方法,所以这个狗的结构体实现了动物接口
  4. 定义一个 animalAction 函数,参数是 接口类型,意味着只要实现了该接口的类型都可以传
  5. 在 main 函数中,分别实例化了一个马和一个狗并传入 animalAction ,从而实现了多态

空接口 interface{}

  1. 空接口是指没有定义任何方法的接口。
  2. 因此任何类型都实现了空接口。
  3. 空接口类型的变量可以存储任意类型的变量。
  4. 使用空接口实现可以接收任意类型的函数参数。
  5. 把一个空接口类型的值赋值给一个类型需要通过断言。

类型断言

我们可以通过变量后面 . (类型)的语法对变量进行断言

	func demo1(){var i interface{}var str stringi = "adf"str = i.(string)fmt.Print(str) // abc}
	func demo2(){var i interface{}var number inti = 123number = i.(int)fmt.Print(number) // 123}

函数传参

  1. 可以把接口类型的数据传入到函数里。
  2. 想知道断言是否成功可以通过接口第二个参数。
	func demo3(i interface{}){value1 ,ok1 := i.(string)if ok1 {fmt.Printf("i is string,value:%s\n",value1)}value2 ,ok2 := i.(int)if ok2 {fmt.Printf("i is int,value:%d\n",value2)}}func main(){demo3(1) // i is int,value:1demo3("abc") // i is string,value:abc}

switch 判断类型

如果觉得上面那种 if 判断多个类型的时候很麻烦,我们可以使用 switch i.(type) 语法来判断多个类型。

	func demo4(i interface{}){switch i.(type) {case int:fmt.Println("is int")case string:fmt.Println("is string")case bool:fmt.Println("is bool")}}func main(){demo4(1)//is intdemo4("abc")// is stringdemo4(true)//is bool}

这篇关于Go语言 Interface(接口)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/941014

相关文章

Go微服务: Prometheus性能监控与Grafana平台的搭建

Prometheus 概述 promethues 是一套开源的监控&报警&时间序列数据库的组合基本原理是通过http协议周期性抓取被监控组件的状态适合Docker、Kubernetes环境的监控系统 Promethues 整体架构 一、抓取数据的两种方式 1 )Short-lived jobs 短暂的任务 不会提供长时间的http去为promethues抓取数据这个服务很短暂,

C语言实现通讯录,包括增删改查以及动态开辟内存,写入文件等功能

文章目录 前言一、注意二、源码1. test.c源文件2. contact.h头文件3. contact.c源文件 总结 前言 C语言实现通讯录,包括增删改查以及动态开辟内存,写入文件等功能 一、注意 在通讯录菜单栏使用枚举定义PeoInfo类型时,每个结构体类型的成员也使用枚举来确定长度刚开始动态开辟3个PeoInfo类型的内存若通讯录满员,则每次动态开辟2个PeoIn

【LangChain系列 15】语言模型——LLMs(一)

原文地址:【LangChain系列 15】语言模型——LLMs(一) 本文速读: 异步API 自定义LLM Fake LLM HumanInput LLM 本文将介绍LLMs在LangChain中的一些用法,帮助我们更好地了解LLM模块。 01 异步API LangChain通过异步库实现了对异步的支持,异步对于多LLM的并发调用是非常有用的。目前,OpenAI、P

数据结构与算法学习笔记十---链队列的表示和实现(C语言)

目录 前言 1.什么是链队 2.链队的表示和实现 1.定义 2.初始化 3.销毁 4.清空 5.空队列 6.队列长度 7.获取队头 8.入队 9.出队 10.遍历队列 11.完整代码 前言     本篇博客介绍链栈队列的表示和实现。 1.什么是链队     链队是采用链式存储结构实现的队列。通常链队使用单链表表示。     图1.链队的示意

C语言中的控制语句:深入解析与案例实践3

11. 动态内存管理         在C语言中,我们可以使用动态内存管理函数来在运行时分配和释放内存。这为我们提供了更大的灵活性,特别是在处理大小可变的数据时。 #include <stdio.h>#include <stdlib.h>int main() {int n, *p, i;printf("Enter the number of elements: ");scanf("%d",

Python接口自动化测试之动态数据处理

在前面的知识基础上介绍了在接口自动化测试中,如何把数据分离出来,并且找到它的共同点,然后依据这个共同点来找到解决复杂问题的思想。我一直认为,程序是人设计的,它得符合人性,那么自动化测试的,就是需要在复杂世界的背后,找到一个共同的点,然后把复杂的程序进行简单化。再次看如下的截图:        在这个图片中,可以看到这是不同的接口请求的数据,那么我们在自动化测试中就得定位到具体的行和列,

Sam Blackshear谈Move语言的起源

Move编程语言作为Sui生态系统的关键组成部分,通过可编程交易区块等机制支持其独特的对象数据模型,并支持高效的代码。五年前,Mysten Labs的联合创始人兼首席技术官Sam Blackshear创建了Move。他专门设计了Move,用于编写智能合约,并着重于安全性。 https://www.youtube.com/watch?v=TaMo-vBep0M 视频内容: 我是Move的创

数据驱动测试在接口测试和网站测试中的应用

什么是数据驱动测试 据驱动测试是一种测试方法,其中测试数据和测试逻辑是分开的,测试数据被存储在外部源中(如Excel表格、JSON文件、数据库等),测试逻辑则独立于测试数据。在测试过程中,测试数据被读取并传递给测试逻辑,以执行相应的测试操作。这种方法使得测试用例的维护更加简单,并且能够轻松地扩展和修改测试数据,而不需要修改测试代码。 数据驱动测试的作用和价值包括: 易于维护和扩展

根据ip限制接口访问次数

前言 我们利用redis去实现这个功能,redis的天然高并发和内存单线程速度拉满,非常适合做这个场景。为了可用性,我们把它封装成注解形式,哪个接口想被根据ip限制接口访问次数,直接标注上注解即可。 一、添加配置 在yaml文件中添加如下配置: spring.redis.host: 172.xx.xx.xxspring.redis.port: 6379spring.redis.d

go语言基础1

1.token         token是构成源程序的基本不可在分割单元。编译器编译源程序的第一步就是将源程序分割为一个个独立的token,这个过程就是词法分析。Go语言的token可以分为关键字、标识符、操作符、分隔符和字面常量等,如图所示:         Go token分隔符有两类:一类是操作符,还有一类自身没有特殊含义,仅用来分隔其他token,被称为纯分隔符。