广告
返回顶部
首页 > 资讯 > 精选 >go语言可不可以开发接口
  • 829
分享到

go语言可不可以开发接口

2023-07-04 20:07:53 829人浏览 薄情痞子
摘要

本篇内容主要讲解“Go语言可不可以开发接口”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“go语言可不可以开发接口”吧!go语言可以开发接口。go语言中接口是一组方法的签名,它是go语言中重要的组

本篇内容主要讲解“Go语言可不可以开发接口”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“go语言可不可以开发接口”吧!

go语言可以开发接口。go语言中接口是一组方法的签名,它是go语言中重要的组成部分,接口做的事情就好像是定义一个规范或者协议,各个实现方只要按照协议实现即可。go语言中使用interface关键字来定义接口,语法“type 接口类型名 interface{方法名1( 参数列表1 ) 返回值列表1 方法名2( 参数列表2 ) 返回值列表2…}”。

接口对于我们来说应该是一个比较熟悉的概念,在各种开发语言中运用都非常的广泛,对于像我们比较熟悉java的程序员来说对于接口就更加的亲切,下面我们来看下在go语言中接口是怎么用,以及接口在日常开发中发挥的作用。

概念

go语言中接口是一组方法的签名,它是go语言中重要的组成部分,接口做的事情就好像是定义一个规范或者协议,各个实现方只要按照协议实现即可。

接口是一种类型

接口类型是对其他类型行为的抽象和概括,不关心具体的实现细节,这种抽象的方式可以让我们的函数变的更加灵活。

接口定义

type 接口类型名 interface{    方法名1( 参数列表1 ) 返回值列表1    方法名2( 参数列表2 ) 返回值列表2    …}

在go语言中我们使用interface关键字来定义接口。

接口实现条件

如果一个任意类型T的方法集为一个接口类型的方法集的超集,则我们说类型T实现了该接口。

接口的实现在go语言中是隐式的,也就说两个类型之间的实现关系不需要在代码中体现出来,G哦语言中也没有类似java中implements的关键字,Go编译器将自动在需要的时候检查两个类型之间的实现关系。接口定义后,需要实现接口,调用方才能正确编译通过并使用接口。

接口的实现需要遵循两条规则才能让接口可用:

接口的方法与实现接口的类型方法格式一致在类型中添加与接口签名一致的方法就可以实现该方法。签名包括方法中的名称、参数列表、返回参数列表。也就是说,只要实现接口类型中的方法的名称、参数列表、返回参数列表中的任意一项与接口要实现的方法不一致,那么接口的这个方法就不会被实现。

package mainimport "fmt"type Phone interface {Call()SendMessage()}type HuaWei struct {Name  stringPrice float64}func (h *HuaWei) Call() {fmt.Printf("%s:可以打电话",h.Name)}func (h *HuaWei) SendMessage() {fmt.Printf("%s:可以发送短信",h.Name)}func main() {h := new(HuaWei)h.Name="华为"var phone Phonephone = hphone.SendMessage()}

当类型无法实现接口时,编译器会报错:

a.函数名称不一致导致的报错

b.实现函数的方法签名不一致导致的报错

接口中所有方法均被实现当一个接口中有多个方法时,只有这些方法都被实现了,接口才能被正确编译并使用

func (h *Xiaomi) Call() {fmt.Printf("%s:可以打电话",h.Name)}func main() {h := new(Xiaomi)h.Name="小米"var phone Phonephone = hphone.SendMessage()}

go语言可不可以开发接口

当 小米 类型仅仅实现接口中的一个方法的时候,我们在使用的时候,编译报错。

类型与接口的关系

一个类型实现多个接口

一个类型可以实现多个接口,而接口之间彼此独立,不知道对方的实现。

例如,狗既可以动,可以叫

package mainimport "fmt"type Move interface {move()}type Say interface {say()}type Dog struct {Name string}func (d *Dog) move()  {fmt.Printf("%s会动\n", d.Name)}func (d *Dog) say()  {fmt.Printf("%s会叫汪汪汪\n", d.Name)}func main() {var m Movevar s  Sayd:=&Dog{Name: "旺财",}m = ds=dm.move()s.say()}

多个类型实现同一个接口

Go语言中不同的类型还可以实现同一接口 首先我们定义一个Mover接口,它要求必须有一个move方法。

type Mover interface {    move()}

例如狗可以动,汽车也可以动,可以使用如下代码实现这个关系:

type dog struct {    name string}type car struct {    brand string}// dog类型实现Mover接口func (d dog) move() {    fmt.Printf("%s会跑\n", d.name)}// car类型实现Mover接口func (c car) move() {    fmt.Printf("%s速度70迈\n", c.brand)}

这个时候我们在代码中就可以把狗和汽车当成一个会动的物体来处理了,不再需要关注它们具体是什么,只需要调用它们的move方法就可以了。

func main() {        var x Mover        var a = dog{name: "旺财"}        var b = car{brand: "保时捷"}        x = a        x.move()        x = b        x.move()    }

空接口

空接口:interface{},不包含任何方法,正因为如此,任何类型都实现了空接口,所以空接口可以存储任意类型的数据。

fmt 包下的 Print 系列函数,其参数大多是空接口类型,也可以说支持任意类型

func Print(a ...interface{}) (n int, err error)func Println(fORMat string, a ...interface{}) (n int, err error)func Println(a ...interface{}) (n int, err error)

空接口作为map的值

// 空接口作为map值    var studentInfo = make(map[string]interface{})    studentInfo["name"] = "李白"    studentInfo["age"] = 18    studentInfo["married"] = false    fmt.Println(studentInfo)

类型推断

空接口可以存储任意类型的值,那我们如何获取其存储的具体数据呢?

接口值

一个接口的值(简称接口值)是由一个具体类型和具体类型的值两部分组成的。

这两部分分别称为接口的动态类型和动态值。

想要判断空接口中的值这个时候就可以使用类型断言,其语法格式:

x.(T)

其中:

  • x:表示类型为interface{}的变量

  • T:表示断言x可能是的类型。

该语法返回两个参数,第一个参数是x转化为T类型后的变量,第二个值是一个布尔值,若为true则表示断言成功,为false则表示断言失败。

func main() {    var x interface{}    x = "ms的go教程"    v, ok := x.(string)    if ok {        fmt.Println(v)    } else {        fmt.Println("类型断言失败")    }}

上面的示例中如果要断言多次就需要写多个if判断,这个时候我们可以使用switch语句来实现:

func justifyType(x interface{}) {    switch v := x.(type) {    case string:        fmt.Printf("x is a string,value is %v\n", v)    case int:        fmt.Printf("x is a int is %v\n", v)    case bool:        fmt.Printf("x is a bool is %v\n", v)    default:        fmt.Println("unsupport type!")    }}

因为空接口可以存储任意类型值的特点,所以空接口在Go语言中的使用十分广泛。

到此,相信大家对“go语言可不可以开发接口”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: go语言可不可以开发接口

本文链接: https://www.lsjlt.com/news/347121.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • go语言可不可以开发接口
    本篇内容主要讲解“go语言可不可以开发接口”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“go语言可不可以开发接口”吧!go语言可以开发接口。go语言中接口是一组方法的签名,它是go语言中重要的组...
    99+
    2023-07-04
  • go语言可以开发什么
    go语言可以开发后端服务、分布式系统、数据库系统、命令行工具、云原生应用、网络编程和机器学习和人工智能。详细介绍:1、后端服务,可以帮助开发人员快速构建可扩展的Web应用程序和API服务;2、分布式系统,提供了丰富的网络库和并发原语,使得开...
    99+
    2023-12-12
    go语言 Golang
  • go语言可不可以做web
    这篇文章主要介绍go语言可不可以做web,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!go语言能做web。Go可以通过在多个Go Web应用之上架设代理来进行高效的水平扩展;Go语言提供Web应用测试工具,这些工具可...
    99+
    2023-06-06
  • idea可不可以用go语言
    这篇“idea可不可以用go语言”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“idea可不可以用go语言”文章吧。idea可...
    99+
    2023-07-04
  • go语言可不可以编程
    本篇内容主要讲解“go语言可不可以编程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“go语言可不可以编程”吧!go语言可以编程。Go语言是由Google公司开发的一种静态强类型、编译型、并发型、...
    99+
    2023-07-04
  • go语言可以开发前端吗
    go语言可以开发前端吗?可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Gola...
    99+
    2023-05-31
    go语言 golang
  • go语言可以用来开发什么
    go语言可以用来开发网络应用程序、发分布式系统、系统工具和命令行程序、游戏和嵌入式系统。1、网络应用程序,提供了简单易用的API和高速的性能,使得开发者能够快速构建出稳定可靠的Web应用程序;2、发分布式系统,使用Go语言开发分布式系统可以...
    99+
    2023-08-03
  • go语言可不可以写物联网
    这篇文章主要介绍“go语言可不可以写物联网”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“go语言可不可以写物联网”文章能帮助大家解决问题。可以写。在物联网领域,用Golang可以高效的接入并管理数以...
    99+
    2023-07-04
  • go语言可不可以写数据库
    这篇文章主要介绍了go语言可不可以写数据库的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇go语言可不可以写数据库文章都会有所收获,下面我们一起来看看吧。go语言可以写数据库。Go语言和其他语言不同的地方是,Go...
    99+
    2023-07-04
  • go语言可不可以做渗透测试
    本篇内容主要讲解“go语言可不可以做渗透测试”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“go语言可不可以做渗透测试”吧!go语言可以做渗透测试。Go在不需要任何外部依赖项的情况下执行交叉编译非...
    99+
    2023-07-04
  • 是不是可以用Go替代Django和Spring的接口开发?
    随着Go语言的不断发展,越来越多的开发者开始考虑使用它来进行接口开发。相比于传统的Django和Spring框架,Go语言具有更高的性能和更好的并发处理能力。那么,是不是可以用Go替代Django和Spring的接口开发呢?本文将从多个角度...
    99+
    2023-08-29
    django 接口 spring
  • go语言中map可不可以定义长度
    这篇文章主要介绍go语言中map可不可以定义长度,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!go语言中map可以定义长度。map可以根据新增的key-value动态的伸缩,因此它不存在固定长度或者最大限制,但是也可...
    99+
    2023-06-15
  • npm框架是否可以加速Go语言的开发?
    随着互联网的高速发展,许多编程语言也逐渐崛起,其中Go语言备受关注。Go语言是一种编译型语言,可以用于构建高效、可靠的软件。不过,对于一些开发者来说,Go语言的学习曲线还是比较陡峭的。在这个时候,npm框架的出现成为了一种可能的解决方案。 ...
    99+
    2023-06-25
    npm 框架 数据类型
  • 学go语言可以干嘛
    本篇内容主要讲解“学go语言可以干嘛”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“学go语言可以干嘛”吧!1、Go有什么优势可直接编译成可执行文件,不依赖任何东...
    99+
    2022-10-18
  • go语言可以做app么
    go语言可以做app,它是一种现代化、高效、跨平台的编程语言,由Google开发并于2009年首次发布,以其卓越的性能和并发处理能力而闻名,它是一种非常适合构建高可用性和高性能应用程序的语言,具有强大的并发编程能力和优秀的性能表现,在互联网...
    99+
    2023-07-12
  • go语言可以做什么
    go语言用途有服务器端开发、网络编程、嵌入式开发、云计算和分布式系统、数据处理和分析、前端开发等。详细介绍:1、服务器端开发:Go语言具有出色的并发处理能力和性能,因此非常适合用于构建高性能的服务器端应用程序,包括Web服务、API服务、分...
    99+
    2023-12-11
    go语言
  • go语言可以编程吗
    go语言可以编程。Go语言是由Google公司开发的一种静态强类型、编译型、并发型、并具有垃圾回收功能的编程语言;Go语言的用途众多,可以进行网络编程、系统编程、并发编程、分布式编程。Go语言作为服务器编程语言,很适合处理日志、数据打包、虚...
    99+
    2023-05-14
    go语言 Golang
  • IDE中的重定向技术是否可以提高GO语言接口的可靠性?
    随着计算机技术的不断发展,越来越多的程序员开始使用GO语言开发接口。GO语言作为一种高效、简洁、易于学习的编程语言,受到了越来越多程序员的青睐。在开发接口的过程中,IDE中的重定向技术是否可以提高GO语言接口的可靠性呢?本文将就此问题进行探...
    99+
    2023-06-30
    重定向 接口 ide
  • go语言可以跨平台吗
    小编给大家分享一下go语言可以跨平台吗,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!go语言可以跨平台。由于其模块化设计和模块化,即代码被编译并转换为尽可能小的二...
    99+
    2023-06-15
  • go语言可以做前端么
    go语言可以做前端,其原因如下:1、开发人员通过使用Go语言编写API服务,并将其用作前端开发中的后端逻辑;2、开发人员借助Go语言的高效性能和并发能力,将其用于前端的构建工具和任务自动化;Go语言最近也推出了一些专注于前端开发的库和工具,...
    99+
    2023-07-31
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作