Go语言特性解析:深入学习第二集#golang系列教程

发表时间: 2024-03-31 10:53

Go语言特点介绍:3.1编译型语言和解释型语言会导致开发迭代速度较慢。

大家好,这节课来讲讲Go语言的特点。在讲Go语言的特点之前,来讲一讲编译型语言跟解释型语言的区别。无论是C++还是C,还是Java,还是学的python、go,其实都是高级语言。

高级语言的意思是对人很好理解,可以使用人类熟悉的语言去编写程序,但是对机器不太友好,因为机器不知道这些比如英文是什么意思。所以在这些程序能够被机器执行之前,有两种思路。

·第一种思路是提前把程序编译成机器可以执行的机器码,这样程序一运行,机器就可以去执行这些指令。

·第二种思路是先不提前编译,等到程序执行的时候,比如机器每执行一行,时时编译成机器码,然后机器再去执行。

这两种思路的差异,举个例子,就相当于比如开了一家早餐店,编译型语言是什么意思?比如早餐店提供煮鸡蛋这样的产品,如果是编译型语言,在早餐店开门之前就把所有的生鸡蛋煮熟了,顾客一上来就可以直接吃到煮熟的鸡蛋,就不需要再煮一遍。如果是解释性语言,这些生鸡蛋先不提前煮熟,等顾客来了之后再去煮,鸡蛋煮完之后再给顾客去吃,这是解释性语言。

大家理解这两个方式的不同吧?所以从这两个方式上去看,显然是编译性语言的执行速度会很高,因为提前把这些程序编译好了,而不是等到顾客上来之后才去煮鸡蛋。所以编译型语言的优势就是执行速度特别快,但是如果要对程序做修改就会特别慢。

比如鸡蛋都煮好了,客户不满意怎么办?是不是要重新去煮鸡蛋?所以对于开发迭代这块的效率会比较慢。但是如果是解释性语言,比如顾客来了之后,比如我说我这个鸡蛋煮3分钟,其实对于开发迭代的来说解释性语言其实会特别灵活。

看一下这个图,刚才那个两个例子应该已经能够把编译型语言跟解释型语言讲的很清楚了。

·来看这个图,就是说编译性语言首先通过编译器编译成不同平台,Mac有Windows或者linux各种各样的系统,编译成对应平台可以直接执行的文件,这样编译完了之后就可以直接去执行了。

·编译型语言主要有比如c、c++go和rust,这些都是编译语言性能都特别好。

·再看解释型语言,解释型语言这里也有一个图,解释型语言写成的代码不会提前去编译,那怎么办?就在每个平台上有个Mac操作系统或者linux操作系统,你俩可以操作系统,要装一个解释器,然后我执行的时候解释器去读源代码,读完之后实时的把它编译成机器码,然后再让机器去执行。

解释型语言有python、javascript、PHP等都是解释型语言的示例。

·go是编译性语言,所以go的性能会特别好,特别是在写高并发或者大流量的程序,它的运行速度特别快。

·再看一下强类型语言,首先说一下go其实是一个强类型语言,强类型语言是怎么理解的?也就是说其实这些类型就是在程序中用的各种各样的变量,它的类型是提前就确定好了。

比如我定一个整形,那么这个整形在这个程序的整个生命周期都是整数,它只能存用来存整数。如果我定一个变量是字符串,那么这个字符串在整个程序的生命周期里边永远都是一个字符串。所以说我要执行一个整形加字符串直接编译就会报错。这就是它的变量类型在编译时的时候已经确定了。

弱类型语言首先不确定,如果定一个data等于5,这时候执行这行的时候会把这个用一个整数来存5。这还有一个这幅串,执行第三行的时候,待塔加这幅串的时候,就是在执行的阶段会强制的把整数转成字符串去相加。

所以看到弱类型语言其实执行的时候,根据上下文的环境去决定它的类型,就是强类型是提前就确定了,弱类型语言是执行的阶段才会确定。强类型语言往往会比较安全,而且速度会比较快,因为一切都是确定的。而弱类型语言要在执行的阶段才会确定,所以会花很多时间去做类型转换或做类型的判断,这时候执行速度会受一些影响,安全性也会有各种各样的漏洞。

go其实是一个静态的强类型语言,这也是go的性能比较快的一个原因。

·第三点,go语言并发。go语言并发的技术是goroutine,goroutine其实是一个轻量级的线程,goroutine的主要特点相对于C++或者其他语言,所以它的开销会特别小。也就是可以在一个特别是后端的程序,可以无脑的去写很多很多个goroutine,就很多的线程,而且不用担心它的性能会有问题,调度的性能也特别好。

在Go程序中,操作系统级别的线程调度是由Go的调度器去实现,其实不需要关注操作系统级别的线程,只需要关注Go里面的goroutine就好了。在goroutine的调度过程中,它底层实现了一个线程的调度机制,所以在go里面写并行的程序其实非常方便。今天就是讲的Go语言的特点,下节课会讲一下Go的开发环境的搭建,然后写下第一个程序。

今天的课就上到这里,大家如果有问题可以随时在评论区里面去评论。