iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >golang中的空接口怎么用
  • 134
分享到

golang中的空接口怎么用

2023-06-14 08:06:36 134人浏览 薄情痞子
摘要

这篇文章给大家分享的是有关golang中的空接口怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、空接口Golang 中的接口可以不定义任何方法,没有定义任何方法的接口就是空接口。空接口表示,没有任何约束,

这篇文章给大家分享的是有关golang中的空接口怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

1、空接口

Golang 中的接口可以不定义任何方法,没有定义任何方法的接口就是空接口。空接口表示,没有任何约束,因此任何类型变量都可以实现空接口。空接口在实际项目中用的是非常多的,用空接口可以表示任意数据类型

func main() {// 定义一个空接口 x, x 变量可以接收任意的数据类型var x interface{}s := "你好 golang"x = sfmt.Printf("type:%T value:%v\n", x, x)i := 100x = ifmt.Printf("type:%T value:%v\n", x, x)b := truex = bfmt

1 、空接口作为函数的参数: 使用空接口实现可以接收任意类型的函数参数

// 空接口作为函数参数func show(a interface{}) {fmt.Printf("type:%T value:%v\n", a, a)}

2 、map 的值 实现空接口: 使用空接口实现可以保存任意值的字典

// 空接口作为 map 值var studentInfo = make(map[string]interface{})studentInfo["name"] = "张三"studentInfo["age"] = 18studentInfo["married"] = falsefmt.Println(studentInfo

3 、切片实现空接口

var slice = []interface{}{"张三", 20, true, 32.2}fmt.Println(slice)

2、类型断言

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

别称为接口的动态类型和动态值。

如果我们想要判断空接口中值的类型,那么这个时候就可以使用类型断言,其语法格式:x.(T)

其中:

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

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

该语法返回两个参数,第一个参数是 x 转化为 T 类型后的变量,第二个值是一个布尔值,若

为 true 则表示断言成功,为 false 则表示断言失败

例如:

func main() {var x interface{}x = "Hello golnag"v, ok := x.(string)if ok {fmt.Println(v)} else {fmt.Println("类型断言失败")}}

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

实现:

注意:类型.(type)只能结合 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 语言中的使用十分广泛。

关于接口需要注意的是: :只有当有两个或两个以上的具体类型必须以相同的方式进行处理时

才需要定义接口。不要为了接口而写接口,那样只会增加不必要的抽象,导致不必要的运行

时损耗。

3、结构体值接收者和指针接收者实现接口的区别

值接收者:

如果结构体中的方法是值接收者,那么实例化后的结构体值类型和结构体指针类型都可以赋

值给接口变量

package mainimport "fmt"type Usb interface {Start()Stop()}type Phone struct {Name string}func (p Phone) Start() {fmt.Println(p.Name, "开始工作")}func (p Phone) Stop() {fmt.Println("phone 停止")}func main() {phone1 := Phone{Name: "小米手机",}var p1 Usb = phone1 //phone1 实现了 Usb 接口 phone1 是 Phone 类型p1.Start() //小米手机 开始工作phone2 := &Phone{Name: "苹果手机",}var p2 Usb = phone2 //phone2 实现了 Usb 接口 phone2 是 *Phone 类型p2.Start() //苹果手机 开始工作}

指针接收者:

如果结构体中的方法是指针接收者,那么实例化后结构体指针类型都可以赋值给接口变量,

结构体值类型没法赋值给接口变量

package mainimport "fmt"type Usb interface {Start()Stop()}type Phone struct {Name string}func (p *Phone) Start() {fmt.Println(p.Name, "开始工作")}func (p *Phone) Stop() {fmt.Println("phone 停止")}func main() {//正确写法phone2 := &Phone{Name: "苹果手机",}var p2 Usb = phone2 //phone2 实现了 Usb 接口 phone2 是 *Phone 类型p2.Start() //苹果手机 开始工作}

4、一个结构体实现多个接口

Golang 中一个结构体也可以实现多个接口

package mainimport "fmt"type AInterface interface {GetInfo() string}type BInterface interface {SetInfo(string, int)}type People struct {Name stringAge int}func (p People) GetInfo() string {return fmt.Sprintf("姓名:%v 年龄:%d", p.Name, p.Age)}func (p *People) SetInfo(name string, age int) {p.Name = namep.Age = age}func main() {var people = &People{Name: "张三",Age: 20,}// people 实现了 AInterface 和 BInterfacevar p1 AInterface = peoplevar p2 BInterface = peoplefmt.Println(p1.GetInfo())p2.SetInfo("李四", 30)fmt.Println(p1.GetInfo())}

5、接口嵌套

接口与接口间可以通过嵌套创造出新的接口

package mainimport "fmt"type SayInterface interface {say()}type MoveInterface interface {move()}// 接口嵌套type Animal interface {SayInterfaceMoveInterface}type Cat struct {name string}func (c Cat) say() {fmt.Println("喵喵喵")}func (c Cat) move() {fmt.Println("猫会动")}func main() {var x Animalx = Cat{name: "花花"}x.move()x.say()}

6、Golang中空接口和类型断言使用细节

使用空接口定义一个map类型的数据,其数据中是切片或者结构体,其通过索引拿到对应切片内容的值,出现错误,必须通过类型断言的形式拿到对应的数据,结构体同理,案例如下:

package mainimport "fmt"type Address struct { Name string Phone int}// Golang中空接口和类型断言使用细节func main() { var userinfo = make(map[string]interface{}) userinfo["username"] = "张三" userinfo["age"] = 20 userinfo["hobby"] = []string{"睡觉", "吃饭"} fmt.Println(userinfo["age"]) fmt.Println(userinfo["hobby"]) // fmt.Println(userinfo["hobby"][1]) //interface {} does not support indexing var address = Address{ Name: "李四", Phone: 1521242141, } fmt.Println(address.Name) //李四 userinfo["address"] = address fmt.Println(userinfo["address"]) //{李四 1521242141} // var name = userinfo["address"].Name //type interface {} is interface with no methods // fmt.Println(name) hobby2, _ := userinfo["hobby"].([]string) fmt.Println(hobby2[1]) //吃饭 address2, _ := userinfo["address"].(Address) fmt.Println(address2.Name, address2.Phone) //李四 1521242141}

感谢各位的阅读!关于“golang中的空接口怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

您可能感兴趣的文档:

--结束END--

本文标题: golang中的空接口怎么用

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

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

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

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

下载Word文档
猜你喜欢
  • golang中的空接口怎么用
    这篇文章给大家分享的是有关golang中的空接口怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、空接口Golang 中的接口可以不定义任何方法,没有定义任何方法的接口就是空接口。空接口表示,没有任何约束,...
    99+
    2023-06-14
  • golang中的空接口使用详解
    目录1、空接口2、类型断言3、结构体值接收者和指针接收者实现接口的区别4、一个结构体实现多个接口5、接口嵌套6、Golang中空接口和类型断言使用细节1、空接口 Golang 中的接...
    99+
    2022-11-12
  • Golang接口的定义与空接口及断言怎么使用
    这篇文章主要讲解了“Golang接口的定义与空接口及断言怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang接口的定义与空接口及断言怎么使用”吧!1. Golang中的接口在G...
    99+
    2023-07-06
  • golang接口返回空数组怎么实现
    在Go语言中,可以使用nil来表示空数组。具体实现如下:```gopackage mainimport ("fmt")type My...
    99+
    2023-09-27
    golang
  • 什么是接口?golang中怎么实现接口?
    Golang 是一门受到很多程序员喜爱的编程语言,它拥有卓越的性能和强大的并发特性。在 Golang 中,接口是一种非常重要和强大的特性。本文将详细介绍 Golang 接口的实现。一、什么是接口?接口是一个抽象的概念,它是一组方法的集合,这...
    99+
    2023-05-14
  • Golang接口的定义与空接口及断言的使用示例
    目录1. Golang中的接口2. 为什么要使用接口3. 定义一个Usber接口(从下往上转换)4. 空接口1. 空接口说明2. 空接口作为函数的参数3. 切片实现空接口4. map...
    99+
    2023-05-15
    Go接口的定义 Go空接口 Go断言
  • golang的接口怎么定义使用
    这篇文章主要讲解了“golang的接口怎么定义使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“golang的接口怎么定义使用”吧!在golang中,接口是一种类型,是用来将对方法进行一个收...
    99+
    2023-07-04
  • golang 怎么实现接口
    Golang 是一门非常流行的静态类型、并发安全的编程语言。它提供了非常强大的接口机制,使得开发者可以实现代码的模块化和解耦。在本文中,我们将探讨如何使用 Golang 实现接口。什么是接口接口是面向对象编程中非常重要的概念。接口定义了一个...
    99+
    2023-05-14
    Golang
  • golang中的接口是什么
    Go语言中接口即”interface“是一种类型,它定义了一组方法的集合,接口是一种抽象类型,它描述了对象的行为而不关心对象的具体类型,一个类型只要实现了接口定义的所有方法,就被称为实现了该接口,使用接口能够提高代码的灵活性,使得代码更加模...
    99+
    2023-12-12
    golang接口 Golang go语言
  • Golang空接口与类型断言的实现
    目录空接口定义使用场景空接口几个要注意的坑类型断言Go语言中类型断言的两种语法类型断言配合 switch 使用空接口 定义 空接口是特殊形式的接口类型,普通的接口都有方法,而空接口没...
    99+
    2022-11-13
  • Golang开发之接口怎么使用
    今天小编给大家分享一下Golang开发之接口怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Golang的接口是什么在...
    99+
    2023-07-05
  • 怎么实现Serializable的空接口
    这篇文章主要讲解了“怎么实现Serializable的空接口”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么实现Serializable的空接口”吧!01、先来点理论Java 序列化是 J...
    99+
    2023-06-16
  • go怎么声明空接口
    在Go语言中,可以使用`interface{}`来声明空接口。下面是一个示例代码: package main import "fm...
    99+
    2023-10-25
    go
  • golang怎么实现接口转换
    随着越来越多的企业采用 Golang 进行开发,Golang 语言的高效、简洁、安全等优点也逐渐被人们所认可。其中,Golang 提供了接口(interface)作为与外部的桥梁,使得代码更加灵活且易于扩展。在实际开发中,我们有时需要将接口...
    99+
    2023-05-14
  • golang中什么是接口?(用法浅析)
    Golang 是一种非常流行的编程语言,其提供了许多强大的特性和工具,可以帮助开发者轻松地构建高性能和高可靠性的应用程序。其中,Golang 接口是其最强大和重要的一个特性之一。本文将向您介绍 Golang 接口的用法。一、什么是接口?接口...
    99+
    2023-05-14
  • uniapp怎么清空接口数据
    UniApp是一款跨平台的开发框架,它能够将代码快速地转化为多个平台上可运行的程序。在一个UniApp应用中,接口数据是非常重要的一部分。如果我们在应用中需要清空接口数据,该怎么做呢?下面就为大家介绍一下uniapp怎么清空接口数据。Uni...
    99+
    2023-05-22
  • golang怎么自动生成api接口
    在golang中,可以使用开源的工具和库来自动生成API接口的代码。以下是一种常见的方法:1. 使用Swagger/OpenAPI规...
    99+
    2023-09-27
    golang
  • 怎么在golang中通过接口嵌套实现复用
    本篇文章为大家展示了怎么在golang中通过接口嵌套实现复用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。golang适合做什么golang可以做服务器端开发,但golang很适合做日志处理、数据打...
    99+
    2023-06-14
  • java空接口有什么作用
    本篇内容介绍了“java空接口有什么作用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本教程操作环境:windows7系统、java10版,...
    99+
    2023-06-30
  • Golang中Interface接口的三个特性
    原文地址 第一次翻译文章,请各路人士多多指教! 类型和接口 因为映射建设在类型的基础之上,首先我们对类型进行全新的介绍。go是一个静态性语言,每个变量都有静态的类型,因此每个变量在编...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作