Golang语言概述
-
简介
Golang,简称Go语言,由C语言设计者设计(区块链研发工程师、Go服务器端/游戏软件工程师、Golang分布式/云计算软件工程师)
-
应用领域
- 区块链技术,分布式账本技术,是一种互联网数据库技术,其特点是去中心化、公开透明,让每个人均可参与数据库记录。
- 后端服务器应用,美团后台流量支撑程序(排序、推荐、搜索等),提供负载均衡、cache、容错、按条件分流、统计运行指标。
- 云计算/云服务后台应用
-
Go语言的诞生:
核心开发团队:
- Ken Thompson(肯 汤普森)图灵奖,美国国家技术奖,Unix原创者,飞行员,C语言,B语言;
- Rob Pike(罗布 派克),贝尔实验室,UTF-8,脱口秀,1980年奥运会射箭银牌,天文学家,伽马望远镜;
- Robert Griesemer Java编译器。
Google发明Go的原因:计算机硬件技术更新频繁,主流编程语言明显落后于硬件,不能合理利用多核多CPU的优势提升软件系统性能;缺乏一个简洁高效的编程语言【现有的编程语言:1. 风格不统一 2. 计算能力不够 3. 处理大并发不够好】;C/C++存在内存泄漏的问题
-
Go语言发展简史
- 2007年开始设计
- 2009.11.10全球发布
- 2015.8.19 Go1.5版发布,本次更新中移除了”最后残余的C代码
- 2017.2.17 Go1.8
- 2017.8.24 Go1.9 1.9.2
- 2018.2.16 Go1.10
-
Go语言的特点
- 静态编译语言的安全和性能、动态语言开发维护的高效率 Go = C + Python。
- 从C语言中继承了很多概念,包括表达式语法、控制结构、基础数据类型、调用参数传值、指针等等,也保留了和C语言一样的编译执行方式及弱化指针。
- 引入包的概念,用于组织程序结构,Go语言的一个文件都要归属于一个包,而不能单独存在。
- 垃圾回收机制,内存自动回收,不需要开发人员管理。
- 天然并发。
- 从语言层面支持并发,实现简单
- goroutine,轻量级线程,可实现大并发处理,高效利用多核
- 基于CPS(Communicating Sequential Processes)并发模型实现
- 吸收了管道通信机制,channel
- 函数返回多个值
- 心的创新:比如切片slice、延时执行defer等
-
开发工具
- Visual Studio Code
- Sublime Text
- Vim/Vi
- Emacs
- Eclipse IDE
- LiteIDE
- JetBrains
-
开发环境的搭建(安装和配置SDK)
-
SDK(Software Development Kit)软件开发工具包,提供给开发人员使用,其中包含了对应开发语言的工具包
-
下载SDK链接: https://golang.google.cn/dl/
- windows下建议使用:go1.9.2.windows-amd64.zip
- linux下建议使用:go1.9.2.linux-amd64.tar.gz
- mac下建议使用:go1.9.2.darwin-amd64.pkg
-
配置环境变量
- 根据Windows系统在查找可执行程序的原理,可以将Go所在路径定义到环境变量中,让系统帮我们去找运行执行的程序,这样在任何目录下都可以执行go指令。
- 在Go开发中,需要配置GOROOT(指定SDK安装路径d:/goSDK/go)、Path(添加SDK的/bin目录)、GOPATH(工作目录,将来我们的go项目的工作)
- 重新打开cmd测试,任意目录下,go和go version
-
-
Go快速入门
-
开发步骤:
-
安装vscode
-
将go代码写入.go文件
-
目录结构
-
代码
- package main//每个文件必须归属于一个包
- impor"fmt"//引入包,可以使用包内函数
- func main(){//func关键字,表示一个函数,main是函数名(程序入口)
- fmt.Println("hello, world!")//调用fmt包内函数输出
-
通过go build命令对go文件进行编译,生成.exe可执行文件(在cmd中cd到main目录下)“go build hello.go"
-
执行.exe文件(cmd中直接输入hello.exe回车)
-
通过go run命令可以直接运行hello.go程序(类似执行一个脚本文件的形式)"go run hello.go"
-
-
两种执行流程方式的区别
- 如果编译生成了可执行文件,可将该可执行文件拷贝到没有go开发环境的机器上,仍然可以运行
- 如果是直接go run,要在另外一个机器运行,也需要go开发环境,否则无法执行
- 在编译时,编译器会将程序运行依赖的库文件包含在可执行文件中,所以,可执行文件变大了很多
-
编译时生成其他名字的可执行文件”go build -o myhello.exe hello.go"
-
注意事项
- go源文件必须以go为扩展名
- go应用程序的执行入口是main()函数
- go语言严格区分大小写
- go方法由一条一条语句构成,每个语句后不需要分号(go语言在每行后自动加分号)
- go编译器是一行一行进行编译的,因此一行只能写一条语句,否则报错
- go语言定义的变量或者import的包如果没有使用到,编译不能通过
- 大括号必须成对出现
-
go语言常用转义字符(escape char)
- \t 制表符(排版对齐)
- \n 换行
- \ 转义字符
- \r 回车(从当前行的最前面开始输出,覆盖掉以前的内容)
-
注释
- 行注释//(ctrl+/)
- 块注释(多行注释)/xxx/
- 注意:块注释内不能再嵌套块注释
-
规范的代码风格
- 尽量使用行注释
- 正确的缩进和空白(shift+tab向左移动,tab向右移动)(gofmt main.go调格式文件不变)(gofmt -w main.go调格式文件也改变)
- 运算符两边加空格
- 大括号必须紧跟在小括号后边,不允许换行(设计理念:一个问题尽量只有一个解决方法)
- 建议每一行不超过80个字符,太长的代码用逗号换行隔开
-
go官方编程指南
- https://golang.org/#
- API(application program interface)应用程序变成接口
-
go标准库API文档
- golang中文网,在线标准库文档:https://studygolang.com/pkgdoc
-