Golang閉包案例分析與普通函數對比

閉包案例設計模式

package main import ( "fmt" "strings" //記住必定引入strings包 ) //①編寫一個函數makeSuffix,能夠接收一個文件後綴名(好比.jpg),並返回一個閉包 //②調用閉包,能夠傳入一個文件名,若是該文件名沒有指定的後綴(如.jpg),則返回.jpg,若是有則全稱 //③要求使用閉包方式 //④strings.HasSuffix該函數能夠來判斷某個字符串是否有指定後綴  func makeSuffix (suffix string) func (string) string { return func (name string) string { if !strings.HasSuffix(name, suffix) { return name + suffix //若是沒有後綴就拼接  } return name } } func main(){ //先返回一個閉包 test := makeSuffix(".jpg") fmt.Println("文件名處理後:", test("go語言聖經")) fmt.Println("文件名處理後:", test("PHP設計模式.jpg")) }
D:\goproject\src\main>go run hello.go 文件名處理後: go語言聖經.jpg 文件名處理後: PHP設計模式.jpg

 說明閉包

以上代碼返回的是一個函數,這個函數引用的是suffix,而suffix是函數外的變量,那麼這個函數外的suffix和返回的函數構成閉包。函數

普通函數測試

//傳遞根據哪一個後綴判斷,其次是文件名字 func makeSuffix (suffix string, name string) string { if !strings.HasSuffix(name, suffix) { return name + suffix //若是沒有後綴就拼接  } return name } func main(){ fmt.Println("文件名處理後:", makeSuffix("jpg","go語言聖經")) fmt.Println("文件名處理後:", makeSuffix("jpg","PHP設計模式.jpg")) }
D:\goproject\src\main>go run hello.go 文件名處理後: go語言聖經jpg 文件名處理後: PHP設計模式.jpg

對比說明spa

閉包函數只須要傳遞一次要測試的jpg後綴;用普通函數的話,傳遞完成後綴會消失,閉包會保存。設計

相關文章
相關標籤/搜索