1、defer語句
package main
import "fmt"
func main() {
/*
1.defer語句的格式
defer 語句
2.defer語句的作用
延遲執行, 會在所屬函數執行完畢之后再執行
常用于資源釋放, 解鎖, 錯誤處理等等
以前在C語言中我們說過, 通過malloc申請的存儲空間, 一定更要釋放free
但是由于我們不能寫完malloc之后立即free,所以經常導致我們忘記釋放
malloc -- >申請存儲空間
... ... --> 使用存儲空間
free --> 釋放存儲空間
注意點:
如果在同一個函數中編寫了多個defer語句, 那么會遵守先進后出的原則
先注冊的defer語句后執行, 后注冊的defer語句先執行
*/
//fmt.Println("申請存儲空間")
//defer fmt.Println("釋放存儲空間")
//fmt.Println("使用存儲空間")
//fmt.Println("使用存儲空間")
//fmt.Println("使用存儲空間")
defer fmt.Println("第一條語句")
defer fmt.Println("第二條語句")
defer fmt.Println("第三條語句")
defer fmt.Println("第四條語句")
}
結果
第四條語句
第三條語句
第二條語句
第一條語句
Process finished with exit code 0
2、init()函數
package main
import "fmt"
import "test"
// 2.
const MAX_VALUE = 666
// 3.
var num int = getNumber()
// 4.
func init() {
fmt.Println("init函數1")
}
func init() {
fmt.Println("init函數2")
}
// 5.
func main() {
/*
1.在Go語言中保留了兩個函數, 一個叫做main,另外一個叫做init
main函數是由系統調用的, init函數也是由系統調用的
2.init函數的作用:
對當前文件進行初始化
3.調用順序
main包 --> 常量 --> 全局變量 --> init函數 --> main函數 --> 執行邏輯代碼 --> Exit程序
4.注意點:
main函數只能在main包中(package main), 并且一個程序只能有一個,
但是init函數每個包中都可以有, 并且可以有多個(但是企業開發推薦只寫一個)
*/
fmt.Println("main函數")
test.getValue()
}
func getNumber() int {
fmt.Println("返回全局變量需要的值")
return 888
}