1. 软件开发的新挑战
Go语言是一门全新的静态类型开发语言,具有自动垃圾回收,丰富的内置类型, 函数多返回值,错误处理,匿名函数, 并发编程,反射,defer等关键特征,并具有简洁、安全、并行、开源等特性。
从语言层面支持并发,可以充分的利用CPU多核,Go语言编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。
系统标准库功能完备,尤其是强大的网络库让建立Web服务成为再简单不过的事情。
Go非常适合用来进行服务器编程,网络编程,包括Web应用、API应用,分布式编程等等。
数据来源:https://www.tiobe.com/tiobe-index/

1.1. Golang发展
Go语言自2009年面世以来,已经有越来越多的公司开始转向Go语言开发,比如腾讯、百度、阿里、京东、小米以及360,而七牛云其技术栈基本上完全采用Go语言来开发。还有像今日头条、UBER这样的公司,他们也使用Go语言对自己的业务进行了彻底的重构。
在全球范围内Go语言的使用不断增长,尤其是在云计算领域,用Go语言编写的几个主要云基础项目如Docker和Kubernetes,都取得了巨大成功。除此之外,还有各种有名的项目如etcd/consul/flannel等等,均使用Go语言实现。
Go语言有两快,一是编译运行快,还有一个是学习上手快。
Go语言的学习曲线并不陡峭,无论是刚开始接触编程的朋友,还是有其他语言开发经验而打算学习Go语言的朋友,大家都可以放心大胆来学习和了解Go语言,“它值得拥有!”
1.2. Golang思想
Less can be more 大道至简,小而蕴真 让事情变得复杂很容易,让事情变得简单才难 深刻的工程文化
C的关键字 37个
Go关键字 25个
C++关键字 84个
1.3. Golang作者
Golang的"父亲"

Golang语言开发团队,宇宙无敌爆炸的强悍…..

罗伯特·格瑞史莫,罗波·派克,肯·汤普逊于2006年1月2号下午15点4分5秒设计出了go语言。
Robert开发GO之前是Google v8、HotSpot JVM的主要贡献者;
Rob主要是Unix、UTF-8、plan9的作者;
Ken主要是C、B语言、Unix之父。

后来Ian Lance Taylor、Russ Cox加入项目,Ian Lance Taylor是GCC的作者之一,目前负责GCC的Go实现;Brad Fitzpatrick之前是Memcache的作者,目前主要是HTTP2的实现作者。
1.4. Golang与新技术



Golang是Google开发的一种静态强类型、编译型、并发型、具有垃圾回收功能的编程语言。Go语言作者之一Rob Pike在新文章“Go: Ten years and climbing”中,回顾了一下 Go 语言的发展过程。他们自己都没想到Go语言的迅猛发展,迅速成为了云计算领域中新一代开发语言,中国程序员对Go的热爱超出了他们的想象。
Go语言特色:
- 语法简单、上手快
- 并行和异步编程几乎无痛点,Go语言的Goroutine和Channel是并发编程两大神器,而C、Java、Python等语言的并发和异步控制比较麻烦,还很容易出错,而Go解决这个问题非常优雅流畅
- 互联网时代的C语言,C语言关注执行效率和性能与底层友好,而python是用尽量少的代码完成更多的事。而Go语言期望完成一种C+python的统一,解决开发效率和底层应用开发
- Go语言有Google世界一流的技术公司支持
- 杀手级应用Docker
Go语言不会吞噬底层到C和C++的级别,也不会吞噬到Java的业务层。Go语言一定能吞噬的是Pass上的项目,例如消息缓存中间件、服务发现、日志收集、控制系统等。
Go语言杀手级的Docker应用优势:
- Docker上手容易
- 解决了运维中的环境问题
- Google的支持
- k8s
1.5. Golang语言与企业应用
正在使用Golang的企业

1.6. Golang特性
谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去10多年间软件开发的难度令人沮丧。Google 对 Go 寄予厚望,其设计是让软件充分发挥多核心处理器同步多工的优点,并可解决面向对象程序设计的麻烦。它具有现代的程序语言特色,如垃圾回收,帮助开发者处理琐碎但重要的内存管理问题。Go 的速度也非常快,几乎和 C 或 C++ 程序一样快,且能够快速开发应用程序。
golang 如同 c + python
1.自动gc。
2.更丰富的内置类型。
3.函数多返回值。
4.错误处理。
5.匿名函数和闭包。
6.类型和接口。
7.并发编程。
8.反射。
9.语言交互性。
Golang代码文件名
main.go
以".go"结尾
1.Golang变量命令
Go的函数、变量、常量、自定义类型、包(package)的命名方式遵循以下规则:
1)首字符可以是任意的Unicode字符或者下划线
2)剩余字符可以是Unicode字符、下划线、数字
3)字符长度不限
2.Go只有25个关键字
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
3.Go还有37个保留字
Constants: true false iota nil
Types: int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error
Functions: make len cap new append copy close delete
complex real imag
panic recover
4.可见性:
1)声明在函数内部,是函数的本地值,类似private
2)声明在函数外部,是对当前包可见(包内所有.go文件都可见)的全局值,类似protect
3)声明在函数外部且首字母大写是所有包可见的全局值,类似public
1.6.1. Go语言声明方式
var(声明变量), const(声明常量), type(声明类型) ,func(声明函数)
1.6.2. Go程序目录结构


Go的程序是保存在多个.go文件中
文件的第一行就是package XXX声明,用来说明该文件属于哪个包(package)
package声明下来就是import声明
再下来是变量,常量,函数的声明。
1.6.3. Go项目构建及编译
一个Go工程中主要包含以下三个目录:
src:源代码文件
pkg:包文件
bin:相关bin文件
创建Go工程的步骤:
1: 建立工程文件夹 goproject
mkdir goproject
2: 在工程文件夹中建立src,pkg,bin文件夹
cd goproject
mkdir -p {src,pkg,bin}
3: 在GOPATH中添加projiect路径 例 $HOME/goproject
export GOROOT=/usr/local/go
export GOPATH=/opt/gocode
4: 如工程中有自己的包gostudy,那在src文件夹下建立以包名命名的文件夹 例 gostudy2
/opt/gocode/
src
gostudy2
main.go
bin
pkg
mkdir -p /opt/gocode/gostudy2
5:在src文件夹下编写主程序代码代码 main.go
cd src
touch main.go #代码如下
package main
import "gostudy2"
func main() {
gostudy2.Test()
}
6:在gostudy文件夹中编写 first.go
cd gostudy2
touch first.go #代码如下
package gostudy2
import (
"fmt"
)
func Test() {
fmt.Println("我是来自于gostudy2包中的test函数")
}
7:编译,运行代码
go build main.go #此步会在当前路径,生成一个main可执行文件
go run main.go #编译且直接运行文件,不会生成可执行文件
go install main.go #此步会在$GOPATH/bin目录下生成main可执行文件
至此一个Go工程编辑成功。