• 首页
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案
目录

golang与C语言相比最重要的改进是什么

golang与C语言相比最重要的改进是:1.内存管理;2.语言的简洁性;3. 不使用动态链接库;4. 具备包体系;5. 面向对象。其中,Golang在C语言的基础上添加了内存管理机制,这使得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应该做的。

一站式研发项目管理平台 PingCode

一站式研发项目管理平台 PingCode

支持敏捷\瀑布、知识库、迭代计划&跟踪、需求、缺陷、测试管理,同时满足非研发团队的流程规划、项目管理和在线办公需要。

相关文章