### 小節
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
- 多線程:通道思路
- 多線程爬蟲:快代理