首页 > 其他分享 >【golang】Go语言中interface类型怎么使用

【golang】Go语言中interface类型怎么使用

时间:2023-12-28 15:24:22浏览次数:36  
标签:return name golang Go 类型 interface type

1、Go语言中interface类型的定义

 

在Go语言中,interface类型是一个抽象的类型,它是一组方法签名的集合,只要某个类型实现了这些方法,它就属于该interface类型。

在Go语言中定义一个interface类型的方法,需要使用 interface 关键字。下面是interface类型的完整定义方式:

type interface_name interface {
    method_name1 [return_type]
    method_name2 [return_type]
    method_name3 [return_type]
    ...
    method_namen [return_type]
}

其中,interface_name 表示定义的接口名称。method_name 表示接口中的方法名,如果方法有返回值,则需要加上返回值类型。这里需要特别注意,接口定义的方法并不需要实现,只是需要在接口类型中定义方法签名。

2、Go语言中interface类型的实现

 

在Go语言中实现某个interface类型的变量,只需要实现该接口中的所有方法。例如,下面代码实现了一个简单的接口:

type student struct {
    name string
    age  int
}

type studentInterface interface {
    GetName() string
    GetAge()  int
}

func (s student) GetName() string {
    return s.name
}

func (s student) GetAge() int {
    return s.age
}

func main() {
    stu := student{"John", 18}
    var varStu studentInterface = stu

    fmt.Println(varStu.GetName())
    fmt.Println(varStu.GetAge())
}

在上面代码中,我们实现了一个接口 studentInterface,其定义了两个方法,GetName和GetAge。同时,我们也定义了一个struct类型 student,包含name和age两个字段。

在接口实现过程中,我们通过定义一个student类型的变量stu,来实现了studentInterface类型的变量varStu。通过调用varStu对象的方法GetName和GetAge,我们可以获得stu对象中的name和age字段值。

需要注意的是,在实现interface类型时,需要将实现的方法定义在接口实现的类型上。例如,在上面代码中,我们将GetName和GetAge这两个方法定义在student类型上。

 

3、Go语言中其他类型转化为interface类型

 

在Go语言中,我们可以将其他类型的数据转换为interface类型的数据。在转换过程中,我们可以通过赋值方式将某个具体的类型赋值给空接口类型,从而将该类型数据转换为interface类型的数据。

// 通过实现Stringer接口将自定义类型转化为interface类型
type People struct {
    name string
    age int
}

func (p People) String() string {
    return fmt.Sprintf("%v (%v years)", p.name, p.age)
}

func main() {
    john := People{"John", 18}
    fmt.Println(john)

    var varObj interface{}
    varObj = john

    fmt.Printf("varObj is: %v\n", varObj)
}

在上面的代码中,我们先定义一个自定义类型People,包含name和age两个字段。我们通过实现方法Stringer,将该类型转化为interface类型,之后将People类型变量john转化为interface类型变量varObj。

<iframe style="display: none !important"></iframe>

标签:return,name,golang,Go,类型,interface,type
From: https://www.cnblogs.com/cxy2020/p/17932784.html

相关文章

  • go-使用通道模拟抢到活动
    packagemainimport( "fmt" "gorm.io/driver/mysql" "gorm.io/gorm" "math/rand" "sync" "time")//用户结构体typeUserstruct{ Idint Namestring Telstring Addressstring}......
  • 【Django进阶】djangorestframework-jwt使用
    简介Jsonwebtoken(JWT),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资......
  • MongoDB Oplogs 到底都记录了什么 与 智者老冯
    最近董宇辉的事情,让我意识到,如果光一味的搞技术,那么对于人生和生活是不完整的,后序在撰写一些技术文章的时候,会带有一些对于当前热点事件的一些感触和反思,也希望能找到一些有同样想法的人,终究人生的道路是孤独的,如果在孤独中能找到一些人能对你有一些共鸣,那是一件幸福的事情。这里先......
  • Golang channel的关闭
    使用内置函数close可以关闭channel,当channel关闭后,就不能再向channel写数据了,但是仍然可以从channel中读取数据。一旦将channel关闭了,只能读不能写。相当于关闭管道就数据不能进入到队列里面了,只能进行读操作,只读不写。channel支持for-range的方式进行遍历,请注意两个细节(1)在遍历时,......
  • 超时控制:Go语言下的网络请求与时间赛跑
    开场白:在互联网的世界里,我们经常要与各种API打交道。有时,这些API可能会因为各种原因而变得“慢条斯理”,这时,超时控制就显得尤为重要了。今天,我们就来聊聊如何在Go语言中实现HTTP请求的超时控制,与时间赛跑!知识点一:了解超时控制的必要性想象一下,当你正在等待一个重要的API响应时,如果......
  • 跨域请求:Go语言下的“通天大道”
    开场白:嘿,各位Go语言的爱好者们,你们是否曾经遇到过这样的困扰:当你的Go应用试图与另一个域的API进行交流时,突然跳出一个“未允许的跨域请求”的警告?别担心,今天,我们将一起在这条“通天大道”上漫步,解决跨域的困扰!知识点一:何为跨域问题?简单来说,当你在浏览器中访问一个网页,该网页试图从......
  • HTTP代理服务器:Go语言下的“网络翻译官”
    开场白:在这个全球化的网络时代,有时我们需要一个“翻译官”来帮助不同系统、不同语言进行交流。今天,我们就来探讨如何使用Go语言,轻松实现这样一个角色——HTTP代理服务器,让我们的网络请求更加畅通无阻!知识点一:什么是HTTP代理服务器?想象一下,你是一名只会说中文的游客,身处一个只会说英......
  • 处理HTTP错误响应:Go语言中的稳健之道
    开场白:在Web开发中,HTTP错误响应是不可避免的一部分。当请求无法成功完成时,服务器会返回一个错误响应。今天,我们将深入探讨如何在Go语言中优雅地处理这些HTTP错误响应。知识点一:HTTP错误响应的常见类型HTTP错误响应通常由状态码和相应的消息组成。常见的状态码包括:404(未找到)、500(内......
  • 更改主板开机logo图标
    测试型号:微星MAGB660MMORTARWIFIDDR4(迫击炮)原理通过ChangeLogo修改BIOS文件内的图标刷入修改后的BIOS文件下载原版BIOS文件进入微星支持中心搜索主板型号(比如B660M)核对型号准确无误之后,点击左下角的Download(不要点击标题文字)多下载几个版本,个别版本可能无法更改......
  • Golang秒读32GB大文件,如何读取?
    在Go中,处理大文件时,一般采用分块读取的方式,以避免一次性加载整个文件到内存中。以下是读取大文件的简洁步骤:1 打开文件: 使用os.Open打开文件。file, err := os.Open("largefile.txt")if err != nil {    log.Fatal(err)}defer file.Close()2 获取文件信息: 使用......