Go的起源
Go语言(Golang)是由Google开发,于 2009 年正式对外发布的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Go 是非常年轻的一门语言,它的主要目标是“兼具 Python 等动态语言的开发速度和 C/C++ 等编译型语言的性能与安全性”。
目前有非常多的公司也在使用golang
作为创造了Go语言的 google 公司,当然会力挺Go语言了。Google 有很多基于 Go 开发的开源项目,比如 kubernets,docker。
Facebook 也在使用Go语言,为此他们还专门在 Github 上建立了一个开源组织 facebookgo。
腾讯
腾讯在 15 年就已经做了 Docker 万台规模的实践。因为腾讯主要的开发语言是 C/C++ ,所以在使用Go语言方面会方便很多,也有很多优势,不过日积月累的 C/C++ 代码很难改造,也不敢动,所以主要在新业务上尝试使用 Go。
百度
百度主要在运维方面使用到了Go语言,其次就是百度消息通讯系统的服务器端也使用到了Go语言。
京东
京东云消息推送系统、云存储,以及京东商城的列表页等都是使用Go语言开发的。
小米
小米对Go语言的支持,在于运维监控系统的开源,此外,小米互娱、小米商城、小米视频、小米生态链等团队都在使用Go语言。
360
360 对Go语言的使用也不少,比如开源的日志搜索系统 Poseidon,还有 360 的推送团队也在使用Go语言。
Go的创始人
- 肯·汤普逊(Ken Thompson) 贝尔实验室 Unix 团队成员,C语言、Unix 和 Plan 9 的创始人之一,在 20 世纪 70 年代,设计并实现了最初的 UNIX 操作系统,仅从这一点说,他对计算机科学的贡献怎么强调都不过分。他还与 Rob Pike 合作设计了 UTF-8 编码方案。
- 罗布·派克(Rob Pike) Go语言项目总负责人,贝尔实验室 Unix 团队成员,除帮助设计 UTF-8 外,还帮助开发了分布式多用户操作系统 Plan 9、Inferno 操作系统和 Limbo 编程语言,并与人合著了《The Unix Programming Environment》,对 UNIX 的设计理念做了正统的阐述。
- 罗伯特·格瑞史莫(Robert Griesemer) 就职于 Google,参与开发 Java HotSpot 虚拟机,对语言设计有深入的认识,并负责 Chrome 浏览器和 Node.js 使用的 Google V8 JavaScript 引擎的代码生成部分。
Go的特性
golang是一种静态强类型、编译型、并发型、并具有垃圾回收功能的编程语言。
语法简单
Go语言的语法规则严谨,没有歧义,更没什么黑魔法变异用法。任何人写出的代码致,这使得Go语言简单易学。放弃部分“灵活”和“自由”,换来更好的维护性。都基本一
并发型
Go语言从根本上将一切都并发化,运行时用 Goroutine 运行所有的一切,包括 main.main 入口函数。
垃圾回收
Go的自动回收内存的特性,使得Go程序开发者可以更加专注于代码的效率,很大程度上避免了内存的泄漏。
静态强类型
静态类型语言:在编译期间确定的或者说运行之前确定的结构,编写代码的时候要明确确定变量的数据类型。
强类型语言:一旦一个变量被指定了某个数据类型,如果不经过强制类型转换,那么它就永远是这个数据类型。
编译型语言
编译型语言在程序在执行之前需要一个专门的编译过程,通过编译器把程序编译成为可执行文件,再由机器运行这个文件,运行时不需要重新翻译,直接使用编译的结果就行了。
标准库
go语言无论论是编译、格式化、错误检查、帮助文档,还是第三方包下载、更新都有对应的工具。
Go的使用领域
鉴于Go语言的特点和设计的初衷,从以下几个方面来分析Go语言擅长的领域:
1.在服务器编程方面,Go语言适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;
2.网络编程方面,Go语言广泛应用于 Web 应用、API 应用、下载应用等;
3.此外,Go语言还可用于内存数据库和云平台领域,目前国外很多云平台都是采用 Go 开发。
Go的优劣
1.优势:Go语言是集多编程范式之大成者,体现了优秀的软件工程思想和原则,其特性可以使开发者快速地开发、测试和部署程序,大大提高了效率。Go语言对于当前大多数主流语言来讲,最大的优势在于具有较高的生产效率、先进的依赖管理和类型系统,以及原生的并发计算支持。因此,Go语言自发布以来就受到了各个领域开发者的关注和青睐。
2.劣势:从程序运行速度的角度来看还不及 C,从第三方库的角度来看,Go语言的库数量还远远不及其他几门主流语言。
虽然Go语言还有一些瑕疵,但从整体来看,它已经是一门非常优秀的通用编程语言了。并且,Go语言在今后的发展上会关注性能、可靠性、可移植性和一些功能增强。
Go的数据类型
布尔型:布尔型的值只可以是常量 true 或者 false。
数字类型:整型 int 和浮点型 float。Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。
字符串类型:字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。
派生类型:(a) 指针类型(Pointer)(b) 数组类型© 结构化类型(struct)(d) Channel 类型(e) 函数类型(f) 切片类型(g) 接口类型(interface)(h) Map 类型
golang
和C语言相似,go语言的基本组成有:
1.包声明:编写源文件时,必须在非注释的第一行指明这个文件属于哪个包,如package main
。
2.引入包,其实就是告诉Go 编译器这个程序需要使用的包,如import "fmt"
其实就是引入了fmt包。
3.函数:和c语言相同,即是一个可以实现某一个功能的函数体,每一个可执行程序中必须拥有一个main函数。
4.变量:Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。
5.语句/表达式:在 Go 程序中,一行代表一个语句结束。每个语句不需要像 C 家族中的其它语言一样以分号 ; 结尾,因为这些工作都将由 Go 编译器自动完成。
6.注释:和c语言中的注释方式相同,可以在任何地方使用以 // 开头的单行注释。以 /* 开头,并以 */ 结尾来进行多行注释,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。
Go语言中声明变量以var关键字开头,变量名放中间,变量类型放在最后。
var 变量名 变量类型
var a int
:=符号
a := 1
//相当于
var a int
a = 1