从前端的角度来入门Golang 【系列一】

88 阅读3分钟

Go语言在多核并发上拥有原生的设计优势,Go语言从底层原生支持并发,无须第三方库、开发者的编程技巧和开发经验。

go是非常年轻的一门语言,它的主要目标是“兼具Python 等动态语言的开发速度和C/C++等编译型语言的性能与安全性” -----官方文档

读完官方文档对Go的介绍,我们至少可以得出以下几点:原生支持并发、动态类型、性能安全、还有Go独有的虚拟线程goroutine,他不是狭义上的线程,而是Go语言内置的调度资源的单位,

goroutine的特点:

    1.`goroutine`具有可增长的分段堆栈。这意味着它们只在需要时才会使用更多内存。
    2.`goroutine`的启动时间比线程快。
    3.`goroutine`原生支持利用channel安全地进行通信。
    4.`goroutine`共享数据结构时无需使用互斥锁。

这些特点简单来说呢,第一点,可以自动增长的分段堆栈,假如非要类比的话,有一个不太恰当的例子就是JS里的数组,JS内的数组是不定长的,分配也是随元素动态增加的。第二点没什么说的,第三点相当于是原生支持进程间通信,第四点,共享数据结构无需使用互斥锁,要了解为什么不需要,首先就要了解互斥锁的概念,前端其实是没有并发的概念的,前端所面向的,只是运行当前代码的这个终端,

编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为" 互斥锁" 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。 ---百度百科

互斥锁: 对共享数据进行锁定,保证同一时刻只能有一个线程去操作。

共享数据结构,相当于我们的全局变量

注意: 互斥锁是多个线程一起去抢,抢到锁的线程先执行,没有抢到锁的线程需要等待,等互斥锁使用完释放后,其它等待的线程再去抢这个锁。

这个就相当于啥,一家有女百家求,相亲可以约很多个相亲,但是同时见面的只能有一个,假如有一个超时了,其他人就得继续等着

不知道我这么理解对不对哈= =

Go是在底层实现了无锁编程,相当于语言原生帮我们做了多线程下的共享数据结构导致的资源抢占的问题,这无疑降低了编程的心智负担,带来开发效率的提升。

接下来,我们将就 基本数据类型 流程控制语句 函数 等等,来进行Go的学习。敬请期待。。。

本文正在参加技术专题18期-聊聊Go语言框架