GO的诞生
版本
设计理念
其他语言的弊端
- 对多核CPU缺乏支持。很多语言诞生过早,还停留在单核CPU时代,未对多核CPU并行做优化
- C语言等原生语言缺乏好的依赖管理(C语言依赖头文件)
- Java、C++等语言过于笨重。很小的一个需求,也需要很多代码,甚至需要引入很重的框架
- C、C++没有提供垃圾回收,这对很多程序员来说并不友好。
Go设计者推崇“最小方式”思维,即一件事仅有一种方式,或尽可能少的方式去完成。目的是减少开发人员的痛苦,减少理解别人选择的痛苦【比如go语言中,循环只有for循环】
- 仅有25个关键字,简洁的语法。
- 内置垃圾回收器,大大降低程序员管理内存的负担
- 去除隐式类型转换、去除指针运算,提高语言健壮性
- 首字母大小写决定可见性,通过约定而不是声明告诉开发者,提高阅读效率
- 故意不支持函数默认数,必须明确每个参数意义,提高设计的清晰度和代码可读性
- 没有面向对象的类,也没有子类,没有构造函数和析构函数(相对于c++来说)
- 偏好组合
- 任何类型都可以拥有方法
- 接口只是方法的集合,其实现是隐式的(无需implements显示声明)
- n--、n++都是语句,不是表达式。没有--n、++n
- 没有三元运算符
- 内存总是初始化为零值
- 没有异常
- 内置字符串、切片、map等类型
- 内置并发支持,对多核计算机支持友好。goroutine、channel、select就是为并发而生的
- 官方提供了丰富的工具链,涵盖了编译、编辑、依赖获取、调试、文档、性能分析等诸多方面
【1】简介
Golang是Google的三个人开发的一种静态强类型、编译型语言。Go语言语法与C相近,但功能上有:内存安全,GC(垃圾回收),结构形态及CSP-style并发计算
【2】设计初衷:
Go语言是谷歌推出的一种编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮丧。派克表示,和今天的C++或C一样,Go是一种系统语言。他解释道,“使用它可以进行快速开发,同时它还是一个真正的编译语言,我们之所以现在将其开源,原因是我们认为它已经非常有用和强大。”
1)计算机硬件技术更新频繁,性能提高很快。目前主流的编程语言发展明显落后于硬件,不能合理利用多核多CPU的优势提升软件系统性能。
2)软件系统复杂度越来越高,维护成本越来越高,目前缺乏一个足够简洁高效的编程语言。
3)企业运行维护很多c/c++的项目,c/c++程序运行速度虽然很快,但是编译速度却很慢,同时还存在内存泄漏的一系列困扰需要解决。
强类型语言也称为强类型定义语言。是一种总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。
通俗的说就是:强类型语言在编译前就把数据类型确定了,被确定了数据类型的变量,如果不强制转换,就永远是给定的数据类型。
比如:Java、C/C++等都是强类型语言。弱类型语言也称为弱类型定义语言。与强类型定义相反。
简单来说:弱类型语言是在编译后确定数据类型,没有明显的类型,他能随着环境的不同,自动变换类型。
比如:VB、JS、PHP等都是弱类型语言。编译和解释都是对源代码的解释处理方式,而由于他们的操作方法不同,所以会有不同的运行的效果:
编译是把源代码的每一条语句都编译成机器语言,并最终生成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,在运行时会有很好的性能;
解释是只有在执行到对应的语句时才会将源代码一行一行的解释成机器语言,给计算机来执行,所以使用解释器来执行的语言也被称为动态语言;
Go语言特点
- 背靠大厂,google背书,可靠
- 天生支持并发(最显著特点)
- 语法简单,容易上手
- 内置runtime,支持垃圾回收
- 可直接编译成机器码,不依赖其他库
- 丰富的标准库
- 跨平台编译
go语言的应用领域
- 服务器编程 【go语言可以替代c/c++】
- 开发云平台
- 区块链 (加密算法有优势)
- 分布式系统 【cdn】
- 网络编程