zoukankan      html  css  js  c++  java
  • 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结合一起应用,不仅用来在两并发函数之间通信,也可以用来阻塞程序。

    python,go,redis,mongodb,.net,C#,F#,服务器架构
  • 相关阅读:
    POJ 1426 Find The Multiple(数论——中国同余定理)
    POJ 2253 Frogger(Dijkstra变形——最短路径最大权值)
    POJ 3790 最短路径问题(Dijkstra变形——最短路径双重最小权值)
    POJ 3278 Catch That Cow(模板——BFS)
    HDU 1071 The area
    HDU 1213 How Many Tables(模板——并查集)
    POJ 1611 The Suspects
    light oj 1214 Large Division
    POJ 1258 Agri-Net(Prim算法求解MST)
    POJ 2387 Til the Cows Come Home(模板——Dijkstra算法)
  • 原文地址:https://www.cnblogs.com/descusr/p/2812142.html
Copyright © 2011-2022 走看看