第一章 go语言简介
Go语言为并发而生
前言
目前Go语言已经⼴泛应用于人工智能、云计算开发、容器虚拟化、⼤数据开发、数据分析及科学计算、运维开发、爬虫开发、游戏开发等领域,抓住趋势,欢迎大家一起学习
一、go是什么?
Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。
罗伯特·格瑞史莫(Robert Griesemer),罗布·派克(Rob Pike)及肯·汤普逊(Ken Thompson)于2007年9月开始设计Go,稍后Ian Lance Taylor、Russ Cox加入项目。Go是基于Inferno操作系统所开发的。
Go于2009年11月正式宣布推出,成为开放源代码项目,并在Linux及Mac OS X平台上进行了实现,后来追加了Windows系统下的实现。
在2016年,Go被软件评价公司TIOBE 选为“TIOBE 2016 年最佳语言”。 目前,Go每半年发布一个二级版本(即从a.x升级到a.y)
二、核心特性
1.并发
Go语言在并发编程方面比绝大多数语言简洁不少,这是它的最大亮点之一,也是其在未来进入高并发高性能场景的重要筹码。
golang的并发执行单元是一种成为goroutine的协程。协程之间的通信靠独有的channel机制实现。
goroutine 类似于线程,但并非线程。可以将 goroutine 理解为一种虚拟线程。Go 语言运行时会参与调度 goroutine,并将 goroutine 合理地分配到每个 CPU 中,最大限度地使用CPU性能。开启一个goroutine的消耗非常小(大约2KB的内存),你可以轻松创建数百万个goroutine
2.GC
GC,内存自动回收,不需要开发人员管理内存,使开发人员更专注业务实现,只需要new分配内存,不需要释放。
先分配一块大内存区域,再大内存被切分成各个大小等级的块,放入不同的空闲list中,对象分配空间时从空闲list中取出大小合适的内存块,内存回收时,会把不用的内存重新放回空闲list,空闲内存会按照一定的策略合并,以减少碎片。
3.编译方面
目前golang具有两种编译器
- 是建立在GCC基础上的Gccgo
- 是分别针对64位x64和32位x86计算机的一套编译器(6g和8g)
4.网络编程
-
socket用net.Dial(基于tcp/udp,封装了传统的connect,listen,accept等接口)
-
http用http.Get/Post()
-
rpc用client.Call(‘class_name.method_name’,args,&reply)
5.函数允许多个返回值
-
允许函数返回多个值,在某种场景下,可以有效的简化编程。
-
go语言推荐的编程风格,是函数返回的最后一个参数作为error类型(只要逻辑中可能出现异常),这样,在语言级别支持多返回值,就很有必要了。
6.语言交互性
-
语言交互性是指本语言是否能和其他语言交互,比如可以调用其他语言编译的库。
-
Go可以和C程序交互
6.异常处理
3个重要的关键字defer,panic,recover
- defer是函数结束后执行,呈先进后出。
- panic是程序出现无法修复的错误时使用,但会让defer执行完。
- recover会修复错误,不至于程序终止,当不确定函数不会出错时使用defer+recover
其他的一些有趣的特性
- 类型推导
- 接口interface
- 包的概念
- 交叉编译
在稍后的文章会详细介绍这些特性