简析Go与其他语言不同的类型

开发 开发工具
笔者用Go写了几个应用之后,对它的几个类型理解得可以说也比较到位。就谈一下Go与其他语言不同的类型。

数组

它跟C语言的数组一样,有固定的长度,声明之前必须很设定其长度。由于受C语言的影响,我一直把它当作指针来看待。其实,Go的数组是个值类型,当把一个数组赋值给另一个数组时,是复制了本身给另一个数组。也就是说,当把数组当作参数进行传递时,会拷贝整个数组,当然也就与C语言的数组指针引用相比了,效率也就大打折扣了。Go数组有一点必须知道,就是它的类型是包括了长度的。一个数组包含了长度,储存类型,实际值三个参数。[3]int与[4]int是两个不同的数组。

切片

数组的兄弟slice(切片),它是Go中最常用到的类型,因为它是指针,而且没长度的限制,可以随时往里面加数据。所以它的性能不仅比数组高,而且更灵活。其实slice的数据结构里面包含了两个列表:一个是数组,一个是指向这个数组的指针。当声明一个slice时,Go会为数组分配一定的空间,当这个数组被填满后,又会分配一个元素的空间。而这个指向数组的指针则会维护三个数据,指针(point)、数组空间(room)和数组中有值的个数(num)。当room=num时,就是增加一个新的元素空间。

Map

Go的map类型跟python的字典几乎一样,都是key-value结构,是一个哈希表,但它的性能跟python比起来,有很大的区别,使用时要明白数据的大小范围,可以参考这篇文章:http://monnand.me/p/Golang-map-bench/zhCN

channel

Go里面有channel类型是Go语言与众不同的地方,也是它的特色类型,它提供了一种机制,在两个并发执行的函数之间进行同步,并通过传递(与该信道元素类型相符的)值来进行通信。事实上,可以认为 channel 是一个管道或者先进先出队列,非常简单且轻量。信道是引用类型,需要使用 make 分配内存,它经常与Goroutine结合一起应用,不仅用来在两并发函数之间通信,也可以用来阻塞程序。

原文链接:http://www.cnblogs.com/descusr/archive/2012/12/10/2812142.html

 

编辑推荐】

责任编辑:彭凡 来源: 博客园
相关推荐

2022-04-24 15:55:22

Go语言语言函数

2010-01-15 14:46:20

C++语言

2010-04-19 12:28:57

2010-03-11 15:16:52

Python编程语言

2011-08-25 10:24:27

Lua

2010-09-09 10:43:56

VPN服务

2024-02-26 08:49:32

NewbingAI模型

2022-08-30 13:20:38

DNS攻击网络安全

2011-07-12 14:04:58

2023-08-02 12:14:56

2012-08-17 10:59:08

IBMdW

2023-06-26 00:03:55

Go语言类型

2009-06-08 21:25:29

Java声音技术

2010-09-10 09:52:44

开源协议栈

2010-09-08 16:25:39

SIP协议栈

2010-09-13 16:58:13

2011-06-16 10:04:36

光缆光纤

2010-05-06 12:02:43

路由负载均衡

2022-09-02 08:03:44

IO程序网卡

2022-09-28 11:57:27

渗透测试网络渗透测试
点赞
收藏

51CTO技术栈公众号