1 安装
下载:https://golang.google.cn/dl/
配置env
添加环境变量 :软件安装在H:\go目录下
下载git软件
地址https://git-scm.com/downloads
下载好之后将目录添加到环境变量里面
goroot:go项目安装目录
linux安装
2 GO的常用变量
直接在终端中输入 go help
即可显示所有的 go 命令以及相应命令功能简介,主要有下面这些:
- build: 编译包和依赖
- clean: 移除对象文件
- doc: 显示包或者符号的文档
- env: 打印go的环境信息
- bug: 启动错误报告
- fix: 运行go tool fix
- fmt: 运行gofmt进行格式化
- generate:从processing source 生成go文件
- install:编辑并安装包和依赖
- list:列出包
- run:编辑并运行go程序
- test:运行测试
- tool:运行go提供的工具
- version:查看go版本
3 golang数组
数组是相同数据类型的一组数据的集合,数组一旦定义 长度不能修改,数组可以通过下标或者是索引来访问元素
数组的定义
省略数组长度
数组长度可以省略 使用 ... 代替 初始化值得数量自动推断,例如 var a=[...]int{1,2,3}
var a=[...]int{0:1,5:77} 有6个元素 其中索引1-4默认为0
var a=[...]bool{0:true,4:true} 有6个元素 其中索引1-3默认为false
4 切片
数组是固定长度,可以容纳相同数据类型的元素的集合,当长度固定时,使用带来一些限制,比如申请的长度太大浪费内存,太小又不够使用,
切片可以理解为可变长度的数组,其实他底层就是使用数组实现的增加了自动扩容功能,切片slice是一个拥有相同类型原色的可变长度序列
语法:
切片的增加和删除
切片直接赋值时 指定的是同一个地址
5map
使用内建函数make也可以使用关键字map map 是一个无序集合
6 函数
- go语言有三种函数:普通函数,匿名函数,方法(定义在struct结构体上的函数)
- 不允许函数重载,也不允许函数同名
- 不能嵌套函数,单可以嵌套匿名函数
- 函数是一个值,可以将函数赋值给变量,这个变量也成为了函数
- 函数可以作为参数传递给另一个函数
- 函数的返回值可以是一个函数
- 函数调用的时候,如果有参数传递给函数,则先拷贝参数的副本,再讲副本传递给函数
- 函数参数可以没有名称
函数再使用之前必须先定义,可以调用函数来完成某个任务,函数可以重复调用,从而达到代码重用
语法
7 闭包和递归
8 defer 语句 和 init 函数
延迟处理 在defer归属的函数即将返回时,将延迟处理的语句按照defer 定义的逆序进行执行,也就是说先被defer的语句最后被执行,最后被defer的语句最先被执行(先进后出)
- defer用于注册延迟调用
- 调用知道return前才被执行,因此可以用来做资源清理
- 多个defer语句,按照先进后出方式zhixng
- defer语句中的变了,在defer声明是就决定了
用途:关闭文件句柄,锁资源释放,数据库连接释放
init函数先于main函数执行,实现包级别的初始化操作
特点:
- init函数先于main函数自动执行,不能被其他函数调用
- init函数没有输入参数 ,没有返回值
- 每个包可以有多个init函数
- 包的每个源文件也可以有多个init函数
- 同一个包的init执行顺序,golang没有明确定义,编程时注意程序不要依赖这个执行顺序
- 不同包的init函数按照包导入的依赖关系决定执行顺序
9 指针
定义类型 *