1.0.0|Go语言基础知识
要想学习一门语言想必阁下每个人都会知道这个语言的发展史,在那之前先不谈这个,常听到一些朋友抱怨:看了一本编程书籍,一百多页,还不清楚一个简单的程序是什么模样,看着后面的内容忘记了前面的内容,本文章不会罗列一个个知识点来介绍语法只是,而是从程序员的视角介绍Go语言的基础语法知识。先介绍GO语言的源代码整体构成和特点,然后从编译器词法产生tokens的视角来分析Go源程序的构成,最后介绍语法的基本知识。相信这种从整体到详细的论述视角能更好地帮助读者学习GO语言的基础知识
1.0.1|语言简介
为什么有那么多编程语言了,为什么还要发明新语言?为什么还要去学习新语言?相信不少人都有这样的疑问。答案很简单,虽然有那么多种语言,但没中语言都有其独特的应用领域,在某个领域使用某种语言能达到收益/投入的最大化。比如在嵌入式领域,汇编和C是首选:在操作系统领域,C是首选:在系统级服务编程领域,C++是首选:在企业极应用程序和web应用领域,Java是首选。就好比木工的工具箱中的锤子可以有很多种,大厨的工具箱中刀子有很多种一样,某种语言就像某种锤子或者某种刀一样,有其特别的应用领域。
1.0.2|Go语言诞生背景
Go语言的诞生主要其于一下原因:
(1)摩尔定律接近失效后多核服务器已经成为了主流,当前的编程语言对并发的支持不是很好,不能很好的发挥多核CPU的威力。
(2)程序规模越来越大,编译速度越来越慢,如何快速地编译程序是程序员的迫切需求。
(3)现有的编程语言设计越来越复杂,由于历史的包袱,某些特性的实现不怎么优雅,程序员花费了更多的精力来应对对编程语法细节而不是问题的领域。
Go语言就是未来解决当下编程语言对并发支持不友好,编译速度慢、变成复杂这三个问题而诞生的。
1.0.3|语言特性
编程语言有几百种,语法的形式千差万别,将这些语法进行抽象概括,剔除表现形式的差异,就形成了一个个表达语义的语言特性,有些语言特性是某个语言独有的,但绝大部分语言特征是很多语言共有的。总的语言特性就几十种,下面归纳一下常用的高级语言的语言特性。
语言组织
所有的高级语言都是用源代码来表达程序,程序的语法格式千差万别,但表达这些语法的基本概念大同小异,主要包括:
标
- 标识符和关键字:
- 变量和常量:
- 运算符:
- 表达式:
- 简单语句:
- 控制结构:
类型系统
每种高级语言都有自己的类型系统,类型系统的特性主要表现在一下几个方面。
动静特性:动态语言还是静态语言
类型强弱:强类型还是弱类型
基本数据类型:报错类型及其支持的运算 和操作集合。
自定义数据类型:包括类型及其支持的运算和操作集合
抽象特性
函数:是否支持函数、匿名函数、高阶函数、闭包等。
面向对象:是否都支持面向对象。
多态:如何支持多态。
接口:是否支持接口。以及接口实现模式
元编程特征
泛型:是否支持泛型。
反射:是否支持反射,反射的能力。
运行和跨平台语言特性
编译模式:是编译活可以执行程序,还是编译成中间代码,还是解释器解释执行。
运行模式:直接由OS加载运行,还是由虚拟机加载执。
内容管理:是否支持垃圾回收。
并发支持:是否原生支持并发,还是库支持。
交叉编译:是否支持交叉编译。
跨平台支持:是否支持多个平台。
语言软实力特性
库:标准库和第三方库是否丰富、好用、高校。
框架:是否有非常出众的框架。
语言自身兼容性:语言规范是否经常变换,语言新版本向前兼容性。
语言影响能力:是否有商业公司支持,社区的活跃性,是否著名项目。
1.0.4|Go语言特性
介绍了那么多通用语言特性,下面通过对比来介绍Go语言的语言特性,如表1-1所示。
1.0.5|总结
如何学习新知识?从大脑的角度来说快速学习新知识的办法式将其与易经掌握的旧知识进行对比,大脑将新知识链接到旧知识里面,最终形成一个知识体系。单纯的知识式不能解决问题的,只有将知识转化为技能,技能才能真正地解决问题。拿什么又是技能呢?所谓技能就是把已掌握的知识抽象程解决问题的认知模型,这些认知模型能够知道我们解决某个领域和相似领域的问题。
同理,编程语言的学习也可以归纳为两个过程:意识要尽量利用已经掌握的编程语言,将新语言和已掌握的语言的语法进行对比,梳理出相同点和不同点,建立之时间的连接,从而快速掌握新语言的语法知识:二是在语言特性上对比新旧语言,新语言一般只是语法新,大多数语言的语言特性大同小异,语言特性具有通用性,语言特性决定着语言的表现里和编程范式,把握新语言的语言特性也是快速学习新语言的一条捷径。希望这些经验能为读者接下来学习GO语言提供一个好的思路和方向。
以上讲述的是Go核心编程的内容,最近学习GO语言头要脱发了看了三本Go语言的书,希望可以给大家带来一些启发,之后会按时更新一些Go语言的教程