【无标题】

本文探讨了Go语言中接口的使用,包括动态类型和动态值的区别,类型描述符的作用,以及如何处理空接口和非空接口实例。重点强调了接口值的动态性质和在编译时与运行时的不同处理方式。
摘要由CSDN通过智能技术生成

一个接口的值由两个部分组成,一个是具体的类型,另一个是那个类型的值,我们称他们两者分别为动态类型和动态值

类型是编译期的概念;因此一个类型不是一个值。

类型的名称和方法我们都称他们为类型描述符

我们看下面的代码:

var w io.Writer
w = os.Stdout
w = new(bytes.Buffer)
w = nil

var w io.Writer代表着这不是一个空接口,对于任何实现了write方法的类型都可以赋值给w

w可以存储任何实现了io.Writer接口的具体类型的值

我们来说一下空接口

var a = interface{}

记住,变量的type和value肯定是具体化的,都是nil

一个接口值的描述需要关注它的动态类型

我们说这个接口值是一个空的接口值

可以使用w == nil来判断接口值是否为空

调用一个空接口值上的任意方法都会产生panic(因为它还没有实现嘛)

w.Write([]byte("hello"))//panic:nil pointer

接着,我们传入了w = os.Stdout一个实例作为一个参数

os.Stdout*os.File类型的实例

其实我一开始不是很能理解为什么传的是一个实例

首先,接口变量存储的是一个具体实例值,而不是类型本身

其次,当我声明一个接口变量的时候,我实际上是在声明一个可以持有任何实现了该接口的具体类型的变量

现在我们可以调用方法了

w.Write([]byte("hello")

这个语法实际上是在编译器的时候,我们并不知道接口值的动态类型是什么,所以一个接口上的调用必须使用动态分配。

也就是直接写这个被赋值的w

而不是直接调用:

os.Stdout.Write([]byte("hello"))

我们会在后期间接调用这个地址,os.Stdout

w = new(bytes.Buffer)这个语句给接口值附上了一个*bytes.Buffer类型的值

这次类型描述符bytes.Buffer,所以最终调用的是(bytes.Buffer).Write方法,并且接收者是该缓冲区的地址

最后,第四个语句将nil赋给了接口值:

w = nil

在接口值和nil进行比较的时候,需要动态类型和接口值都等于nil

我们再继续细说比较的问题: 如果两个接口值的动态类型相同,但是这个动态类型是不可比较的(比如切片),如果对他们进行比较就会panic

var x interface{} = []int{1, 2, 3}
fmt.Println(x == x) // panic: comparing uncomparable type []int

只能比较你非常确定他们的动态值是可比较类型的接口值

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
城市应急指挥系统是智慧城市建设的重要组成部分,旨在提高城市对突发事件的预防和处置能力。系统背景源于自然灾害和事故灾难频发,如汶川地震和日本大地震等,这些事件造成了巨大的人员伤亡和财产损失。随着城市化进程的加快,应急信息化建设面临信息资源分散、管理标准不统一等问题,需要通过统筹管理和技术创新来解决。 系统的设计思路是通过先进的技术手段,如物联网、射频识别、卫星定位等,构建一个具有强大信息感知和通信能力的网络和平台。这将促进不同部门和层次之间的信息共享、交流和整合,提高城市资源的利用效率,满足城市对各种信息的获取和使用需求。在“十二五”期间,应急信息化工作将依托这些技术,实现动态监控、风险管理、预警以及统一指挥调度。 应急指挥系统的建设目标是实现快速有效的应对各种突发事件,保障人民生命财产安全,减少社会危害和经济损失。系统将包括预测预警、模拟演练、辅助决策、态势分析等功能,以及应急值守、预案管理、GIS应用等基本应用。此外,还包括支撑平台的建设,如接警中心、视频会议、统一通信等基础设施。 系统的实施将涉及到应急网络建设、应急指挥、视频监控、卫星通信等多个方面。通过高度集成的系统,建立统一的信息接收和处理平台,实现多渠道接入和融合指挥调度。此外,还包括应急指挥中心基础平台建设、固定和移动应急指挥通信系统建设,以及应急队伍建设,确保能够迅速响应并有效处置各类突发事件。 项目的意义在于,它不仅是提升灾害监测预报水平和预警能力的重要科技支撑,也是实现预防和减轻重大灾害和事故损失的关键。通过实施城市应急指挥系统,可以加强社会管理和公共服务,构建和谐社会,为打造平安城市提供坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值