### 可變參數與內置函數
> 這塊道理太多就不寫了,講的就是內置函數里面,可變參數
### 可變參數的傳遞
```
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
- 多線程:通道思路
- 多線程爬蟲:快代理