### 小节
1. Go语言中声明函数以关键词func为标识
2. Go语言支持可变参数的特性,函数声明可以没有固定数量的参数
3. 匿名函数需要在函数定义时定义函数,匿名函数能以变量的形式传递,常常用于实现闭包。
4. 闭包就是包含了自由变量的匿名函数,其中的自由变量即使脱离了自由变量的环境也不会被删除,在闭包的作用域内可以继续使用这个自由变量。
5. defer语句是在当前函数即将返回是被调用,所有常常使用defer来释放资源。
### 扩展·函数传递参数的本质
值传递:将变量的一个副本传递给函数,不管怎么操作该副本都不会改变原来变量的值
引用传递:将变量的内存地址传递给函数,操作该变量是会找到原变量的地址,对其操作会改变原变量的值
对于int,string和bool传的是原变量的副本。
对于指针,切片,map和channel(通道)传递的是原变量指针的副本,指针指向原变量地址。
```
package main
import "fmt"
//值传递函数
func Byvalue(num int) {
fmt.Println("Byvalue函数中num变量地址", &num)
num = 100
}
//引用传递函数
func Byre(num *int) {
fmt.Println("Byre函数中指针变量num地址", &num)
fmt.Println("Byre函数中指针变量指向地址为", &num)
*num = 100
}
func main() {
nums := 1
fmt.Println("nums的地址为", &nums)
Byvalue(nums)
fmt.Println("nums变量的值为", nums)
Byre(&nums)
fmt.Println("nums变量的值为", nums)
}
结果:
nums的地址为 0xc000012098
Byvalue函数中num变量地址 0xc0000120d0
nums变量的值为 1
Byre函数中指针变量num地址 0xc000006030
Byre函数中指针变量指向地址为 0xc000006030
nums变量的值为 100
```
懂了,传指针的话,是可以改值的。原来如此
### Go语言内置函数
参考:https://www.cnblogs.com/-wenli/p/12573751.html
| 内置函数 | 功能 |
| --- | --- |
| append | 将数据追加到 slice 的末尾,返回一个slice |
| copy | 将源slice的数据复制到目标slice中,当目标slice的空间不够时会舍弃超出的部分,返回的是复制成功的元素个数 |
| delete | 删除map中的键值对|
| len | 计算数组,slice,map,channel等类型的长度 |
| cap | 计算数组,slice,map,channel等类型长度 |
| make | 为slice ,map或者channel类型分配内存并初始化对象 |
| new | 为slice ,map或者channel以外类型分配内存并初始化对象 ,返回指针类型|
| complex | 构建复数 |
| real | 返回复数的实部 |
| imag | 返回复数的虚部 |
| close | 用于关闭channel |
| panic | 触发宕机 |
| recover | 捕获panic内置函数抛出的异常信息 |
| print | 打印标准输出,结尾没有换行符 |
| println | 打印标准输出,结尾有换行符 |
| printf | |
- 安装开发环境
- 安装开发环境
- 安装详细教程
- 引入包
- Go语言基础
- 基本变量与数据类型
- 变量
- 数据类型
- 指针
- 字符串
- 代码总结
- 常量与运算符
- 常量
- 运算符
- 流程控制
- if判断
- for循环
- switch分支
- goto跳转
- 斐波那契数列
- Go语言内置容器
- 数组
- 切片
- 映射
- 函数
- 函数(上)
- 函数(中)
- 函数(下)
- 小节
- 包管理
- 结构体
- 结构体(上)
- 结构体(中)
- 结构体(下)
- 小节
- 错误处理
- 错误处理
- 宕机
- 错误应用
- 小节
- 文件操作
- 获取目录
- 创建和删除目录
- 文件基本操作(上)
- 文件基本操作(中)
- 文件基本操作(下)
- 处理JSON文件
- 接口与类型
- 接口的创建与实现
- 接口赋值
- 接口嵌入
- 空接口
- 类型断言(1)
- 类型断言(2)
- 小节
- 并发与通道
- goroutine协程
- runtime包
- 通道channel
- 单向通道channel
- select
- 线程同步
- 多线程的深入学习
- http编程
- http简介
- Client和Request
- get请求
- post请求
- 模块函数方法
- 模块
- fmt库,模块
- 项目练习
- 爬虫:高三网
- 爬虫:快代理
- 爬虫:快代理2
- 多线程:通道思路
- 多线程爬虫:快代理