目录
8.1、VSCode(visual studio code)下载安装
一、概述
Go语言(简写:Golang)
程序: 为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合。
API:Application Programming Interface:应用程序编程接口。
Go语言的官网为:www.golang.org/
Go SDK下载地址:golang.google.cn/dl/
Golang中文社区:studygolang.com/dl
Golang中文社区文档:studygolang.com/pkgdoc
1、Golang学习方向
- 区块链研发工程师
- Go服务器端/游戏软件工程师:C和C++做的事情,Go都可以做。例如:处理日志、数据打包、虚拟机处理、文件系统等==>Go的数据处理,处理大并发天然的优势
- Golang分布式/云计算软件工程师
2、Golang的应用领域
区块链应用
区块链技术,简称BT(Blockchain technology),也被称之为分布式账本技术,是一种互联网数据库技术,其特点是去中心化、公开透明,让每个人均可参与数据库记录。
后端服务器应用
美团后台流量支持程序支撑主站后台流量(排序,推荐,搜索等),提供负载均衡,cache,容错,按条件分流,统计运行指标(qps,latency)等功能
云计算/云服务后台应用
盛大云计算:应用范围,CDN的调度系统,分发系统,监控系统,短域名服务,CDN内部开放平台,运营报表系统以及其他一些小工具等。
京东云: 应用范围后台所有服务全部用go实现
3、为什么要学习Go语言?
Go语言是区块链最主流的编程语言,同时也是当前最具开发潜力的语言。
Go语言是Google公司创造的语言,也是Google主推的语言。
国外如Google、AWS等,国内如阿里、小米、京东等都已经开始大规模使用Golang开发其云计算相关产品
4、Go语言诞生
Go语言的核心开发团队
Ken Thompson(肯·汤普森): 1983年图灵奖(Turing Award)和1998年美国国家技术奖(National Medal of Technology)得主。他与Dennis Ritchie是Unix的原创者。Thompson也发明了后来衍生出C语言的B程序语言,同时也是C语言的主要发明人。
Rob Pike(罗布·派克): 曾是贝尔实验室(Bell Labs)的Unix团队,和Plan 9操作系统Plan的成员。他与Thompson共事多年,并共创出广泛使用UTF-8字符编码。
Robert Griesemer: 曾协助制作Java的HotSpot编译器,和Chrome浏览器的JavaScript引擎V8。
5、Google为什么要创造Go语言
- 计算机硬件技术更新频繁,性能提高很快。目前主流的编程语言发展明显落后于硬件,不能合理利用多核多CPU的优势提升软件系统性能。
- 软件系统复杂度越来越高,维护成本越来越高,目前缺乏一个足够简洁高效的编程语言。[现有的编程语言:1.风格不统一 2.计算能力不够 3.处理大并发不够好]
- 企业运行维护很多c/c++的项目,c/c++程序运行速度虽然很快,但是编译速度却很慢,同时还存在内存泄漏的一系列的困扰需要解决。
6、Go语言的发展简史
- 2009 年 11 月 10 日,Go 语言以开放源代码的方式向全球发布。
- 2011 年 03 月 16 日,Go 语言的第一个稳定(stable)版本 R56 发布。
- 2012 年 03 月 28 日,Go 语言的第一个正式版本 Go 1 发布。
- 2013 年 04 月 04 日,Go 语言的 Go 1.1 beta1 测试版发布。
- 2013 年 04 月 08 日,Go 语言的 Go 1.1 beta2 测试版发布。
- 2013 年 05 月 02 日,Go 语言 Go 1.1 RC1 版发布。
- 2013 年 05 月 07 日,Go 语言 Go 1.1 RC2 版发布。
- 2013 年 05 月 09 日,Go 语言 Go 1.1 RC3 版发布。
- 2013 年 05 月 13 日,Go 语言 Go 1.1 正式版发布。
- 2013 年 09 月 20 日,Go 语言 Go 1.2 RC1 版发布。
- 2013 年 12 月 01 日,Go 语言 Go 1.2 正式版发布。
- 2014 年 06 月 18 日,Go 语言 Go 1.3 版发布。
- 2014 年 12 月 10 日,Go 语言 Go 1.4 版发布。
- 2015 年 08 月 19 日,Go 语言 Go 1.5 版发布,本次更新中移除了“最后残余的C代码”。
- 2016 年 02 月 17 日,Go 语言 Go 1.6 版发布。
- 2016 年 08 月 15 日,Go 语言 Go 1.7 版发布。
- 2017 年 02 月 17 日,Go 语言 Go 1.9 版发布。
- 2018 年 02 月 16 日,Go 语言 Go 1.10 版发布。
- 2018 年 08 月 25 日,Go 语言 Go 1.11 版发布。
- 2019 年 03 月 01 日,Go 语言 Go 1.12 版发布。
- 2019 年 09 月 03 日,Go 语言 Go 1.13 版发布。
- 2020 年 02 月 25 日,Go 语言 Go 1.14 版发布。
- 2020 年 08 月 12 日,Go 语言 Go 1.15 版本发布。
- 2021 年 02 月 17 日,Go 语言 Go 1.16 版本发布。
- 2021 年 08 月 17 日,Go 语言 Go 1.17 版本发布。
- 2022 年 03 月 15 日,Go 语言 Go 1.18 版本发布。
7、Go语言的特点
Go语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发维护的高效率,使用一个表达式来形容Go语言,Go=C+Python,说明Go语言既有C静态语言程序的运行速度,又能达到Python动态语言的快速开发。
-
从C语言中继承了很多理念,包括表达式语法,控制结构,基础数据类型,调用参数传值,指针等等,也保留了和C语言一样的编译执行方式及弱化的指针。
-
引入包的概念,用于组织程序结构,Go语言的一个文件都要归属于一个包,而不能单独存在。
-
引入垃圾回收机制,内存自动回收,不需开发人员管理
-
天然并发(重要特点)
(1)从语言层面支持并发,实现简单
(2)goroutine,轻量级线程,可实现大并发处理,高效利用多核。
(3)基于CPS并发模型(Communicating Sequential Processes)实现
-
吸收了管道通信机制,形成Go语言特有的管道channel,通过管道channel,可以实现不同的goroute之间的相互通信。
-
函数返回多个值
-
新的创新:比如切片slice、延时执行defer等
8、Go语言的开发工具
1、VSCode(visual studio code)默认提供Go语言的语法高亮,安装Go语言插件,还可以智能提示,编译运行等功能。
2、Eclipse IDE工具,开源免费,并提供GoEclipse插件
3、JetBrains公司的产品,PyCharm、WebStrom、PhpStrom等IDE工具,都需要安装Go插件。
JetBrains公司的产品,GoLand
4、LiteIDE,是一款专门为Go语言开发的跨平台轻量级集成开发环境(IDE)是国人开发的。免费的。
8.1、VSCode(visual studio code)下载安装
VSCode下载慢:复制下载链接地址替换成国内镜像地址:vscode.cdn.azure.cn
例:
https://az764295.vo.msecnd.net/stable/5e805b79fcb6ba4c2d23712967df89a089da575b/VSCodeSetup-x64-1.76.1.exe
替换为:
https://vscode.cdn.azure.cn/stable/5e805b79fcb6ba4c2d23712967df89a089da575b/VSCodeSetup-x64-1.76.1.exe
9、Go开发环境SDK安装和配置
SDK的全称(Software Development Kit)软件开发工具包
SDK是提供给开发人员使用的,其中包含了对应开发语言的工具包
Go语言的官网为:https://www.golang.org/
,因为各种原因,可能无法访问。
Go SDK下载地址:https://golang.google.cn/dl/
Golang中文社区:https://studygolang.com/dl
Golang中文社区文档:https://studygolang.com/pkgdoc
1、检查SDK是否安装成功:
go version
环境变量path:C:\Program Files\Go\bin
环境变量介绍:根据windows系统在查找可执行程序的原理,可以将Go所在路径定义到环境变量中,让系统帮我们去找运行的程序,这样在任何目录都可以执行go指令。
2、go代码生成exe文件, 执行以下命令会将hello.go在当前目录生成hello.exe
go build hello.go
3、直接运行结果,不生成exe文件
go run hello.go
4、指定生成文件的名字
go build -o hello1.exe hello.go
5、命令行格式化代码
gofmt -w hello.go
直接运行gofmt hello.go只是显示格式化后的代码格式,不写到文件里面
6、go doc 命令 :查看api说明
go doc fmt
二、Go语言快速入门
1、Go程序开发注意事项
- 源文件以.go为拓展名
- 程序入口是main函数
- G语言严格区分大小写
- 代码结束时不需要加分号
- Go编译器是一行行进行编译的,因此一行就写一条语句,不能把多条语句写在同一行,否则报错
- 大括号、小括号必须在同一行的末尾,成对出现的,缺一不可
- Go语言定义的变量或者import的包如果没有使用到,代码不能编译通过
- Go目录结构 文件夹--src--go_code--项目名--包名
2、快速入门
package main
import "fmt"
func main(){
fmt.Println("Hello World!")
}
对上图的说明:
- go文件的后缀是.go
- package main:表示该hello.go文件所在的包是main,在go中每个文件都必须归属于一个包
- import "fmt":表示引入一个包,包名 fmt,引入该包后,就可以使用fmt包的函数
- func main(){:func是一个关键字,表示一个函数,main是函数名,是一个主函数,即程序的入口
- fmt.Println("Hello World!"):表示调用fmt包的函数Println输出Hello World!
运行演示:
3、执行流程
对源码编译后,再运行,Go执行流程如下
对源码直接执行go run 源码,Go执行流程如下 编译运行一步
两种执行流程的方式区别:
- 如果先编译后执行执行,可以把编译后的可执行文件拷贝到没有Go环境的机器上仍可运行。
- 如果直接go run go源代码,那么在另一台机器上运行,也需要go开发环境,否则无法运行。
- 在编译时,编译器会将程序运行依赖的库文件包含在可执行文件中,所以,可执行文件变大了很多。
4、Go语言转义字符
Golang常用的转义字符(escape char)
1.\t:一个制表位,实现对齐的功能
2.\n:换行符
3.\\:一个\
4.\":一个"
5.\r:一个回车,从当前行的最前面开始输出,覆盖掉以前的内容
6.\a:响铃
7.\b:退格
8.\f:换页
9.\v:垂直制表符
10.\':单引号
package main
import "fmt"
func main(){
fmt.Println("姓名\t年龄")
fmt.Println("姓名\n年龄")
fmt.Println("姓名\\年龄")
fmt.Println("姓名\"年龄")
fmt.Println("姓名姓名\r年龄")
}
5、Go语言的注释
注释: 用于注解说明解释程序的文字就是注释,注释提高了代码的阅读性:
注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现。
Go语言的注释两种形式:
- 行注释://注释文字
- 块注释(多行注释):/* 注释文字*/
注:块注释里面不允许有块注释嵌套,被注释的文字,不会被Go编译器执行。
6、Go语言的代码风格
- 正确的注释和注释风格,推荐行注释
- 正确的缩进和空白
- 运算符两边习惯性各加一个空格,比如:2 + 4 * 5
- 行长约定:一行最长不超过80个字符,超过的请使用换行展示,尽量保持格式优雅
正确的:
package main
import "fmt"
func main(){
fmt.Println("Hello World!")
}
错误的:
package main
import "fmt"
func main()
{
fmt.Println("Hello World!")
}
Go设计者思想:一个问题尽量只有一个解决方法
7、标识符的命名规范
- Golang对各种变量、方法、函数等命名时使用的字符序列称为标识符
- 凡是自己可以起名字的地方都叫标识符
标识符的命名规则
- 由26个英文字母大小写,0-9,_组成
- 数字不可以开头
- Golang中严格区分大小写
- 标识符不能包含空格。
- 下划线"_"本身在Go中是一个特殊的标识符,称为空标识符。可以代表任何其它的标识符,但是它对应的值会被忽略(比如,忽略某个返回值)。所以仅能被作为占位符使用,不能作为标识符使用。
- 不能以系统保留关键字作为标识符,比如break,if等
int,float32允许作为标识符:语法可以通过,但是开发中不推荐使用
系统保留关键字
在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.
预定义标识符介绍
除了保留关键字外,Go还提供了36个预定义的标识符,其包括基础数据类型和系统内嵌函数 append,bool,byte,cap,close,complex,complex64,complex128,uint16,copy,false,float32,float64,imag,int,int8,int16,uint32,int32,int64,iota,len,make,new,nil,panic,uint64,print,println,real,recover,string,true,uint,uint8,uintprt
标识符注意事项
- 包名:保持package的名字和目录保持一致,尽量采取有意义的包名,简短,有意义。不要和标准库冲突。
- 变量名、函数名、常量名:采用驼峰法。
- 如果变量名、函数名、常量名首字母大写,则可以被其他的包访问,如果首字母小写,则只能在本包中使用(注:可以简单的理解成,首字母大写是公有的,首字母小写是私有的)
8、常量
- 常量使用const修改
- 常量在定义的时候,必须初始化
- 常量不能修改
- 常量只能修改bool、数值类型(int、float系列)、string类型
- 语法:const identifier [type]=value
package main
import (
"fmt"
)
func main(){
const (
a=1
b=2
)
fmt.Println(a,b)
const (
c=iota
d
e
)
fmt.Println(c,d,e)//0 1 2
const (
f=iota
g=iota
h,i=iota,iota
)
fmt.Println(f,g,h,i)//0 1 2 2
}
Golang中没有常量名必须字母大写的规范
仍然通过首字母的大小写来控制常量的访问范围
谁占领了先机,谁就拥有更多的机会!
干我们这行,啥时候懈怠,就意味着长进的停止,长进的停止就意味着被淘汰,只能往前冲,直到凤凰涅槃的一天!
懂与不懂都是收获
先know how,再know why!有时候做出来不一定知道为什么!
First know how, then know why