

Go是一门什么样的语言?
source link: https://www.cnblogs.com/Can-daydayup/p/15087766.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

知识拓展:
静态强类型语言是什么?
静态强类型语言=静态类型语言+强类型语言
动态类型语言和静态类型语言
动态类型语言
动态类型语言和动态语言是完全不同的两个概念。
动态类型语言:是指在运行期间才去做数据类型检查的语言,说的是数据类型,
动态语言:说的是运行是改变结构,说的是代码结构。
动态类型语言的数据类型不是在编译阶段决定的,而是把类型绑定延后到了运行阶段。
主要语言:Python、Ruby、Erlang、JavaScript、swift、PHP、Perl。
静态类型语言
静态语言的数据类型是在编译期间(或运行之前)确定的,编写代码的时候要明确确定变量的数据类型。
主要语言:C、C++、C#、Java、Object-C。
Go 语言是一种静态类型的编程语言,所以在编译器进行编译的时候,就要知道每个值的类型,这样编译器就知道要为这个值分配多少内存,并且知道这段分配的内存表示什么。
提前知道值的类型的好处有很多,比如编译器可以合理的使用这些值,可以进一步优化代码,提高执行的效率,减少 bug 等等。
强类型与弱类型语言
强类型语言是一种强制类型定义的语言,即一旦某一个变量被定义类型,如果不经强制转换,那么它永远就死该数据类型。
弱类型语言是一种弱类型定义的语言,某一个变量被定义类型,该变量可以根据环境变化自动进行转换,不需要经过现行强制转换。
编译型语言和解释型语言区别
编译型语言
通过专门的编译器,将所有源代码一次性转换成特定平台(Windows、Linux 等)执行的机器码(以可执行文件的形式存在)。
编译一次后,脱离了编译器也可以运行,并且运行效率高。
可移植性差,不够灵活。
代表语言:C、C++、Pascal、Object-C、swift
解释型语言
由专门的解释器,根据需要将部分源代码临时转换成特定平台的机器码。
跨平台性好,通过不同的解释器,将相同的源代码解释成不同平台下的机器码。
一边执行一边转换,效率很低。
代表语言:JavaScript、Python、Erlang、PHP、Perl、Ruby
混合型语言(特殊)
既然编译型和解释型各有缺点就会有人想到把两种类型整合起来,取其精华去其糟粕。就出现了半编译型语言。比如C#,C#在编译的时候不是直接编译成机器码而是中间码,.NET平台提供了中间语言运行库运行中间码,中间语言运行库类CLR(CLR公共语言运行是让 .NET 程序执行所需的外部服务的集合,.NET 平台的核心和最重要的组件,类似于 Java 的 JVM)。.NET在编译成IL代码后,保存在dll中,首次运行时由JIT在编译成机器码缓存在内存中,下次直接执行。我个人认为抛开一切的偏见C#是这个星球上最好的编程语言。可惜微软的政策限制了C#的推广。
Java是一种特殊的高级性语言,它既有解释性语言的特征,也有编译性语言的特征,因为它是经过先编译,后解释的过程。简单说:HelloWorld.java————>HelloWolrd.class————>特定平台的机器代码
①编译 ②解释
Go语言的特点有哪些?
- 语法简洁。
简单好记的关键词和语法。golang语法简单,这个是真的简单,即使从来没接触过过编程的用户,都可以轻松上手,比c++、java、.net更简单易学,甚至比php学起来都轻松。与同为强类型语言的比c++比,更是简单得多。虽然简单,但是实现起功能来,一点也不含糊。
- 开发效率高。
GO语言使用起来简单、代码描述效率高、编码规范统一、上手快。 通过少量的代码,即可实现框架的标准化,能快速的构建各种通用组件和公共类库,进一步提升开发效率,实现特定场景下的功能量产。
- 良好的语言设计。
从学术的角度讲Go语言其实非常平庸,不支持许多高级的语言特性;但从工程的角度讲,Go的设计是非常优秀的:规范足够简单灵活,有其他语言基础的程序员都能迅速上手。更重要的是Go自带完善的工具链,大大提高了团队协作的一致性。比如gofmt自动排版Go代码,很大程度上杜绝了不同人写的代码排版风格不一致的问题。把编辑器配置成在编辑存档的时候自动运行gofmt,这样在编写代码的时候可以随意摆放位置,存档的时候自动变成正确排版的代码。此外还有gofix, govet等非常有用的工具。
- 部署简单。
Go编译生成的是一个静态可执行的文件,除了glibc外没有其他外部依赖。这让部署变得非常的方便:目标机器上只需要一个基础的系统和必要的管理、监控工具,完全不需要操心应用所需要的各种包、库的以来关系,大大减少了维护的负担。
- 并发性好。
Goroutine(Go轻量级线程)和channel使得编写高并发的服务端软件变得相当的容易,很多情况下完全可以不需要考虑锁机制以及由此带来的各种问题。单个Go应用也能有效的利用多个CPU核并行执行的性能好。
- 执行性能强。
毕竟是类C的执行速度,对于一些服务来说,性能是极其重要的一环,事关系统的吞吐、访问的延迟,进而会影响用户的体验,Go语言通过协程可以方便的实现并行处理,达到处理效率的最大化 ,提升系统的吞吐能力。
- 执行性能好。
虽然不如C和Java,但通常比原生Python应用还是高一个数量级的,适合编写—些瓶颈业务。内存占用也非常省。
Recommend
-
105
用 Go 语言编写一门工具的终极指南
-
72
首先要说,这并不是一篇教你如何学习的文章,因为到今天为止我也没有找到一种通用的方法来解决如何学习的问题。但是在探索的道路上,我确实产生过一些思路,我想把这些思考的过程分享出来让大家探讨。如果这对你有帮助的话,那我会非常高兴。...
-
36
JavaScript 俗称 JS,又称借S。起源于 Netscape 浏览器支持的页面脚本,目前已经被 TC39 标准化为 ECMAScript。 所以我们说的 JavaScript 是 ECMAScript 的一种实现,或者说...
-
48
程序员 - @ksssdh123 - 前段时间跟一以前的老同事无意谈起秃头,他们公司搞物联网的,有嵌入式工程师,他说在他们公司只要是秃的,肯定是搞 c (包含 c++)的。也巧了,我刚毕业实习那家也是搞物联网的,那么多秃头工程师,就一个是
-
56
程序员 - @13192262269 - 求各位老哥打醒(╬▔▽▔)先说一下背景:1.公司目前只用到 java,本人 java 科班出身,2 年左右2.已自学 goland3.打算往<服务架构性能方向>发展4.向往北京,打
-
45
『天文学专业』是什么?天文学是研究宇宙中各种天体以及宇宙本身的起源和演化的基础自然科学学科。在当前…
-
19
Go 当前引起了很多关注。让我们看一下 Go 好的部分。 我最近用 Go 写了一个 SS...
-
9
Javascript:10天设计一门语言 译 ...
-
3
从这些角度看 Go 是一门糟糕的语言 从这些角度看 Go 是一门糟糕的语言 上篇文章作者讲到了 Go 的优点,这篇文章提到一些缺点。然而,不少内容我是不认可的。欢迎留言说说你的观点。 Go 当前引...
-
14
计划自学一门语言,入门该选 Go 还是 Rust 呢?编程没有那么难
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK