文章目录
1. 初识GO
1.1 Go语言优势
- 可直接编译成机器码,不依赖其他库,glibc 的版本有一定要求,部署就是扔一个文件 上去就完成了。
- 静态类型语言,但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出 来隐藏的大多数问题,动态语言的感觉就是有很多的包可以使用,写起来的效率很高。
- 语言层面支持并发,这个就是 Go 最大的特色,天生的支持并发。Go 就是基因里面支 持的并发,可以充分的利用多核,很容易的使用并发。
- 内置 runtime,支持垃圾回收,这属于动态语言的特性之一吧,虽然目前来说 GC(内存 垃圾回收机制)不算完美,但是足以应付我们所能遇到的大多数情况,特别是 Go1.1 之 后的 GC。
- 简单易学,Go语言的作者都有C的基因,那么Go自然而然就有了C的基因,那么Go 关键字是 25 个,但是表达能力很强大,几乎支持大多数你在其他语言见过的特性:继 承、重载、对象等。
- 丰富的标准库,Go目前已经内置了大量的库,特别是网络库非常强大。
- 内置强大的工具,Go 语言里面内置了很多工具链,最好的应该是 gofmt 工具,自动化 格式化代码,能够让团队 review 变得如此的简单,代码格式一模一样,想不一样都很
困难。 - 跨平台编译,如果你写的Go代码不包含cgo,那么就可以做到window系统编译linux
的应用,如何做到的呢?Go 引用了 plan9 的代码,这就是不依赖系统的信息。 - 内嵌C支持,Go里面也可以直接包含C代码,利用现有的丰富的C库。
1.2 Go适合做什么?
- 服务器编程,以前你如果使用C或者C++做的那些事情,用Go来做很合适,例如处理 日志、数据打包、虚拟机处理、文件系统等。
- 分布式系统,数据库代理器等。
- 网络编程,这一块目前应用最广,包括Web应用、API应用、下载应用。
- 内存数据库,如google开发的groupcache,couchbase的部分组建。
- 云平台,目前国外很多云平台在采用Go开发,CloudFoundy的部分组建,前VMare的技术总监自己出来搞的 apcera 云平台。
1.3 Go标准命令概述
Go 语言中包含了大量用于处理 Go 语言代码的命令和工具。其中,go 命令就是最常用的一 个,它有许多子命令。这些子命令都拥有不同的功能,如下所示。
build
:用于编译给定的代码包或Go语言源码文件及其依赖包。clean
:用于清除执行其他go命令后遗留的目录和文件。doc
:用于执行godoc命令以打印指定代码包。env
:用于打印Go语言环境信息。fix
:用于执行gotoolfix命令以修正给定代码包的源码文件中包含的过时语法和代码调用。fmt
:用于执行gofmt命令以格式化给定代码包中的源码文件。get
:用于下载和安装给定代码包及其依赖包(提前安装git或hg)。 l list:用于显示给定代码包的信息。run
:用于编译并运行给定的命令源码文件。install
:编译包文件并编译整个程序。test
:用于测试给定的代码包。tool
:用于运行Go语言的特殊工具。version
:用于显示当前安装的Go语言的版本信息。
1.4 HelloWorld
代码:
package main // 必须包含一个main 包
import "fmt" // 导入包含,导入后必须要使用,否则编译器会自动优化掉这一行
func main() {
// 花括号必须这种格式
// main函数不支持参数
// 不需要用分号换行
fmt.Println("hello world!")
}
运行:
zhou@zhoudeMacBook-Air helloworld % go run main.go
hello world!
zhou@zhoudeMacBook-Air helloworld %
2. 基础类型
2.1 变量
2.1.1 变量声明
//1、单变量声明,类型放在变量名之后,可以为任意类型
var 变量名 类型
var v1,v2,v3 string //多变量同类型声明
//2、多变量声明
var {
v1 int
v2