golang与C语言相比最重要的改进是什么?
一、golang与C语言相比最重要的改进是什么
1.内存管理
Golang在C语言的基础上添加了内存管理机制,这使得C语言开发中让人头大的各种内存问题得以解决。Golang初始的几个版本内存管理机制被人诟病,垃圾回收会导致程序停顿,但是现在Golang的内存管理已经相当完善。然而,Golang提供内存管理机制的同时。依然保留了C语言的指针变量类型,这是为什么?
Golang对普通变量采用复制的方式进行使用,而指针是将原始对象的地址进行传递,例如函数传参,普通变量会进行形参向实参的拷贝,函数内部对实参的修改不会影响到函数外的变量,而指针变量只是传递地址,函数内部对实参的修改会直接改变函数外的变量。
保留C语言这一概念,为我们的编程带来了极大地灵活性,C语言编程中有一条简单的规则,如果是基本类型(int,float等)建议使用变量,除非需要对变量进行修改;如果使用复合类型(结构体等),如果不是需要深拷贝的场合,建议使用指针,因为这些类型的变量一般占用内存空间比较大,如果使用变量,会多次复制,影响程序性能。Golang保留了这一概念,就让我们可以按照自己的需要选择合适的方式——使用变量还是指针,代码设计的灵活性更大,改善代码性能的方式也更简单。
2.语句的简洁性
Golang的语句比C语言更加简洁,如定义并初始化变量,
C语言中
int a = 0;
Golang中
a := 0
除了不需要分号,a变量之前未定义,使用:=进行赋值,就是定义变量a且赋值为0,至于a的数据类型,Golang进行了自动推断,由于我们使用整形0进行赋值,所以a就是整形的变量。
3.不使用动态链接库
Golang不支持动态链接库,Golang编译只会生成一个对应的可执行文件,引用第三方包,使用go get直接拉取源码并统一编译。带来的好处就是Golang的项目部署极其简单,可执行文件只有一个,配置好配置文件,资源安排好,直接运行即可。
4.具备包体系
Golang引入了包体系,更方便代码结构的控制和引用第三方资源。C语言没有包的概念,所以之前文章提到,我们需要自己组织好代码的位置,防止概念混乱。
5.面向对象
Golang可以进行面向对象编程,Golang在面向对象方面采取了和C++,Python等相同的理念,Golang提供了面向对象的机制,但是也可以面向过程编程,Golang不限制你使用的编程思想。
Golang的面向对象语法非常简单,派生采用了Has-a的方式,没有提供Is-a的方式,这有两方面原因,一方面,在C语言中,如果进行派生,我们采用一个结构体包含另一个结构体的方式,也就是只能采用Has-a的方式;另外,Is-a的派生方式经常存在问题,如果父类的接口发生变化,经常会直接影响子类的接口也要进行调整,Has-a的方式,父类作为子类的成员变量存在,父类相当于封装在自己的类定义下,代码的变异不容易扩散。
Golang提供了interface,这也是C语言没有的。另外Golang的interface更加易用,不需要显式指定一个类实现了哪个interface,只要是一个类实现了interface中的所有方法,他就可以被认为是这个interface的实现。
至于封装,很简单,首字母大写的全局变量,方法和全局函数是公有的,而首字母小写的全局变量,方法和全局函数是包内可访问的。
延伸阅读:
二、golang丰富的标准库和第三方资源
Golang的标准库十分强大,甚至于包含了Web开发的接口,模板等等,这些都是C语言不可比拟的,经过几年的发展,Golang也拥有了大量的使用人群,所以第三方资源日趋丰富和完善。
以上就是Golang在C基础上的一些进步,总的说来,经过一段时间对Golang的使用,感受非常好。从Golang可以看到很多C语言的影子,但是很多C开发时作为编码规范和思想的东西,在Golang中已经将其作为语法进行了规范和限制,减少了编码时需要考虑的问题量,同时保留了C语言的灵活性,Golang丰富的标准库和第三方资源,增加了使用Golang进行开发的手段。
但是,不得不承认,Golang不适合作为入门级的编程语言,Golang中语法的很多闪光点,需要结合多种编程语言的对比才能发现,如果你有丰富的编程经验,使用Golang时会发现,当时关注的编码问题,Golang都已经考虑到了,这时你会感叹Golang的设计。毕竟作为新生代的编程语言主力,不应该再出现老一辈语言的问题了,取长补短,正是Golang应该做的。

猜你喜欢LIKE
相关推荐HOT
更多>>
python函数中使用for循环
python函数中使用for循环1、在for循环中使用函数需要更长的执行时间,因为每次迭代都会调用该函数。2、如果for循环是在函数内部实现的,那么该...详情>>
2023-11-14 13:53:34
python3.1版本的特性有哪些
python3.1中的特性有哪些1、千位数格式化,可以在使用字符串格式化函数时直接完成。在格式化大数时,通常是每三位数放置逗号,使数字更易读(例...详情>>
2023-11-14 13:18:27
python__new__()和__init__()有什么区别?
在python中,__new__()不是一定要有,只有继承自object的类才有,该方法可以return父类(通过super(当前类名,cls).__new__())出来的实例,或者直...详情>>
2023-11-14 12:38:55
pythonwheel是什么
python的第一个主流打包格式是.egg文件,现在大家庭中又有了一个叫做Wheel(*.whl)的新成员。wheel“被设计成包含PEP376兼容安装(一种非常接近于...详情>>
2023-11-14 11:30:39热门推荐
pythonSymPy求极值
沸python归并排序和快速排序比较
热pythonpartition如何分割字符串
热pythonif-elif-else语句的使用注意
新python函数中使用for循环
python3.1版本的特性有哪些
python__new__()和__init__()有什么区别?
python作为小白该如何抉择python编辑器?
pythonwheel是什么
python如何定义一个函数
pythonpython是什么类型的语言
python怎么传参数
pythonshell是什么
python如何查看对象属性
技术干货






