### 可变参数与内置函数
> 这块道理太多就不写了,讲的就是内置函数里面,可变参数
### 可变参数的传递
```
package main
import "fmt"
// 可变参数改成 切片
// func add(slices []int)
func add(slices ...int) {
sum := 0
fmt.Println("传入的切片变量", slices)
// 传入的切片变量 [1 2 3 4 5 6 7 8 9 10]
for _, value := range slices {
// "_" 这个是可变参数
sum += value
}
fmt.Println(sum)
// 55
}
func addll(num ...int) {
add(num...)
//add(num)
}
func main() {
addll(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
}
```
### 匿名函数和闭包
```
func (参数列表) (返回参数列表) {
函数体
}
```
定义并调用函数
```
package main
import "fmt"
func main() {
// 匿名函数后 添加"()" 传入实参
func(data string) {
fmt.Println("Hello " + data)
}("world")
// Hello world
}
```
将匿名函数赋值给变量
```
package main
import "fmt"
func main() {
result := func(data string) {
fmt.Println("Hello " + data)
// Hello world
}
result("world")
}
```
闭包
> **下面案例结构,同一函数环境内的匿名函数,修改变量不会改变地址,据说匿名函数形成了闭包,算引用?**
```
package main
import "fmt"
func main() {
num := 1
fmt.Println("num值,地址", num, &num)
// num值,地址 1 0xc000012098
func() {
num++
fmt.Println("num值,地址", num, &num)
// num值,地址 2 0xc000012098
}()
func() {
num++
fmt.Println("num值,地址", num, &num)
// num值,地址 3 0xc000012098
}()
}
```
```
package main
import "fmt"
func add(i int) (adds int) {
addes := func() int {
i++
return i
}
adds = addes()
return adds
}
func main() {
a1 := add(0) // 0+1=1
a2 := add(10) // 10+1=11
fmt.Println("a1值,闭包地址", a1, &a1)
fmt.Println("a2值,闭包地址", a2, &a2)
}
结果:
a1值,闭包地址 1 0xc000012098
a2值,闭包地址 11 0xc0000120b0
```
闭包这玩意,我也不是很懂,道理多。但是我操作下来发现,函数环境不同,闭包修改变量的值会影响地址。
- 安装开发环境
- 安装开发环境
- 安装详细教程
- 引入包
- Go语言基础
- 基本变量与数据类型
- 变量
- 数据类型
- 指针
- 字符串
- 代码总结
- 常量与运算符
- 常量
- 运算符
- 流程控制
- if判断
- for循环
- switch分支
- goto跳转
- 斐波那契数列
- Go语言内置容器
- 数组
- 切片
- 映射
- 函数
- 函数(上)
- 函数(中)
- 函数(下)
- 小节
- 包管理
- 结构体
- 结构体(上)
- 结构体(中)
- 结构体(下)
- 小节
- 错误处理
- 错误处理
- 宕机
- 错误应用
- 小节
- 文件操作
- 获取目录
- 创建和删除目录
- 文件基本操作(上)
- 文件基本操作(中)
- 文件基本操作(下)
- 处理JSON文件
- 接口与类型
- 接口的创建与实现
- 接口赋值
- 接口嵌入
- 空接口
- 类型断言(1)
- 类型断言(2)
- 小节
- 并发与通道
- goroutine协程
- runtime包
- 通道channel
- 单向通道channel
- select
- 线程同步
- 多线程的深入学习
- http编程
- http简介
- Client和Request
- get请求
- post请求
- 模块函数方法
- 模块
- fmt库,模块
- 项目练习
- 爬虫:高三网
- 爬虫:快代理
- 爬虫:快代理2
- 多线程:通道思路
- 多线程爬虫:快代理