首页 > 其他分享 >golang接口用法浅谈

golang接口用法浅谈

时间:2023-09-05 17:00:19浏览次数:43  
标签:浅谈 类型接口 实现 value golang 接口 类型 方法

类型接口

Go不是面向对象的语言,在go里通过不同的结构体实现同一组公共接口这种组合的形式实现多态,类似C++的类和虚函数

定义类型接口(Interface Definition):
  • 使用 type 关键字定义接口,指定接口的方法签名。

  • 方法签名由方法的名称、参数列表和返回值组成,但不包含方法体。

  • 接口可以包含零个或多个方法。

示例代码:

type MyInterface interface {
   Method1() // 无参数和返回值的方法
   Method2(param1 int) // 接受一个 int 参数,没有返回值的方法
   Method3() string // 没有参数,返回一个 string 的方法
}
实现类型接口(Interface Implementation):
  • 为了使一个类型实现某个接口,只需要实现接口中定义的所有方法即可。

  • 类型实现接口的方法签名必须与接口定义的方法签名完全一致。

  • 如果类型没有实现接口的所有方法,将不能将该类型的实例赋值给接口类型的变量。

示例代码:

type MyType struct{}

func (t MyType) Method1() {
   // 实现 Method1() 方法的具体逻辑
}

func (t MyType) Method2(param1 int) {
   // 实现 Method2() 方法的具体逻辑
}

func (t MyType) Method3() string {
   // 实现 Method3() 方法的具体逻辑
   return "Hello"
}

// MyType 类型实现了 MyInterface 接口的所有方法
var myVar MyInterface = MyType{}

通过以上步骤,我们就可以定义和使用类型接口。在实际开发中,类型接口常用于实现多态、依赖注入和代码解耦等场景。通过使用类型接口,可以编写具有灵活性和扩展性的代码,同时提供了更好的可测试性和模块化。

需要注意的是,在 Go 语言中,类型的接口实现是隐式的,即类型无需显式地声明实现了哪个接口。只要类型实现了接口中定义的所有方法,就可以将该类型的实例赋值给接口类型的变量,以达到多态的效果。并且,一个类型也可以同时实现多个接口。

空接口

空接口为interface{}any用来表示任意类型的值。和类型接口有很大区别。

存储任意类型的值

通过将值赋给空接口类型的变量,可以存储任意类型的值,类似于其他语言中的通用类型或对象类型。

var data interface{}
data = 42       // 可以存储整数
data = "Hello"  // 可以存储字符串
data = true     // 可以存储布尔值
作为函数参数

使用空接口作为函数的参数,可以接收任意类型的参数。

func PrintValue(value interface{}) {
   fmt.Println(value)
}

PrintValue(42)        // 输出 42
PrintValue("Hello")   // 输出 Hello
PrintValue(true)      // 输出 true
类型断言

可以使用类型断言来将空接口转换为具体类型,并在需要使用具体类型的地方进行类型操作。

value := getData() // 假设 getData() 返回一个空接口类型的值

if str, ok := value.(string); ok {
   // 如果 value 是 string 类型,则执行相应的操作
   fmt.Println("Value is a string:", str)
} else if num, ok := value.(int); ok {
   // 如果 value 是 int 类型,则执行相应的操作
   fmt.Println("Value is an int:", num)
} else {
   // 处理其他类型的情况
}

需要注意的是,在使用空接口时,由于没有类型约束,需要在进行类型转换时进行类型安全的检查,以避免出现运行时错误。

总结来说,空接口是 Go 语言中一种特殊的接口类型,用于存储任意类型的值和接收任意类型的参数。通过类型断言,可以将其转换为具体类型并进行相应的操作。空接口在需要处理不同类型的值时提供了灵活性,但也需要注意处理类型转换时的安全性。

标签:浅谈,类型接口,实现,value,golang,接口,类型,方法
From: https://www.cnblogs.com/peychou/p/17680159.html

相关文章

  • IU5200集成30V的OVP功能,支持I2C接口,3A充电电流,1~4节锂电池升降压充电芯片
    IU5200D是一款自动申请快充输入,开关模式升降压充电管理IC,用于1~4节锂离子电池和锂聚合物电池,以及1~5节磷酸铁锂电池。芯片集成包括4开关MOSFET、输入和充电电流感应电路、电池以及升降压转换器的环路补偿。芯片具有3A的充电电流能力,充电电流可以通过外部电阻灵活可调。IU5200D内置......
  • 3天上手Ascend C编程丨带你认识Ascend C基本概念及常用接口
    本文分享自《 【2023·CANN训练营第一季】——AscendC算子开发入门——第一次课(核函数的定义及实现)》,作者:dayao。AscendC是CANN针对算子开发场景推出的编程语言,原生支持C和C++标准规范,最大化匹配用户开发习惯;通过多层接口抽象、自动并行计算、孪生调试等关键技术,极大提高算......
  • 干货|API接口测试技巧汇总
    1API接口介绍1.1RPC(远程过程调用)远程过程调用(英语:RemoteProcedureCall,缩写为RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用......
  • js 原生方法请求接口
    XNLHttpRequest(xhr)介绍:XMLHttpRequest(简称xhr)是浏览器提供的JavaScript对象,通过它,可以请求服务器上的数据资源。在jQuery中封装的AJAX函数,就是基于xhr,然后封装出jq中的ajax,然后就可以调用出get、post、ajax()三个方法在原生中实际上真正用到的,是XMLHttpRequest这个对象//g......
  • 五笔字根查询接口
    输入法,五笔打字,生活服务,字根查询一、接口介绍可对五笔字根口诀及五笔编码查询,希望能为您学习五笔输入法提供帮助。二、功能体验三、产品特点四、API文档4.1五笔字根查询查询4.1.1接入点说明查询五笔字根。4.1.2接口地址http[s]://route.showapi.com/1861-1?showapi_......
  • API接口的对接流程和注意事项
    随着互联网技术的发展和应用的普及,API接口已经成为不同系统、不同应用之间进行交互和数据交换的重要方式。API接口使得不同的系统能够互相调用对方的功能,提高了系统的灵活性和扩展性。但是,在进行API接口对接的过程中,需要注意一些流程和事项,以确保对接的顺利进行和系统的稳定运行。......
  • 写程序接口常遇到的20个坑
    跨域问题:在接口调用时,如果出现跨域问题需要在服务器端配置CORS(跨域资源共享)。参数校验不完善:需要对接口传入的参数进行校验,确保参数的合法性和完整性。接口安全问题:需要对接口进行身份验证和权限控制,避免未经授权的请求对系统造成损害。接口性能问题:在设计接口时需要考虑接口......
  • 逆向通达信Level-2 续四 (调试level2数据接口)
       ......
  • Golang Gorm 一对多查询 preload预加载
    预加载示例GORM允许使用 Preload通过多个SQL中来直接加载关系,例如:typeUserstruct{gorm.ModelUsernamestringOrders[]Order}typeOrderstruct{gorm.ModelUserIDuintPricefloat64}//查找user时预加载相关Orderdb.Preload("Orders").Fin......
  • 虚拟机部署gitlab 接口502 含泪做笔记 ==> /var/log/gitlab/nginx/gitlab_error.log <
    行不通勿喷,谢谢!!**虚拟机部署gitlab接口502**gitlab-ctltail查看具体报错信息:==>/var/log/gitlab/nginx/gitlab_error.log<==2023/09/0416:45:44[crit]42817#0:*2connect()tounix://var/opt/gitlab/gitlab-rails/sockets/gitlab.socketfailed(13:Permissionde......