国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

淮南 搭建一個(gè)企業(yè)展示網(wǎng)站cba最新排名

淮南 搭建一個(gè)企業(yè)展示網(wǎng)站,cba最新排名,wordpress允許檢索,亦莊網(wǎng)站建設(shè)價(jià)格目錄 一、匿名函數(shù) 1、匿名函數(shù)的特點(diǎn): 2、匿名函數(shù)代碼示例 2、匿名函數(shù)的類型 二、遞歸函數(shù) 1. 遞推公式版本 2. 循環(huán)改遞歸 三、嵌套函數(shù) 1、嵌套函數(shù)用途 2、代碼示例 3、作用域 & 變量生存周期 四、閉包 1、閉包使用場景 2、代碼示例 五、De…

目錄

一、匿名函數(shù)

1、匿名函數(shù)的特點(diǎn):

2、匿名函數(shù)代碼示例

2、匿名函數(shù)的類型

二、遞歸函數(shù)

1. 遞推公式版本

2. 循環(huán)改遞歸

三、嵌套函數(shù)

1、嵌套函數(shù)用途

2、代碼示例

3、作用域 & 變量生存周期

四、閉包

1、閉包使用場景

2、代碼示例

五、Defer

1、defer 關(guān)鍵特點(diǎn)

2、defer 代碼示例

3、defer 在 return 之后執(zhí)行

4、defer 綁定的是“實(shí)參值”,執(zhí)行順序遵循 LIFO


一、匿名函數(shù)

匿名函數(shù)是沒有名稱的函數(shù),通常在定義時(shí)直接使用其功能,而不需要為其命名。匿名函數(shù)的定義一般是在代碼中動態(tài)地創(chuàng)建并立即使用。

1、匿名函數(shù)的特點(diǎn):

? 無名稱:與普通函數(shù)不同,匿名函數(shù)不需要指定名字。

? 即時(shí)使用:常用于需要臨時(shí)函數(shù)的場景,尤其是作為參數(shù)傳遞給其他函數(shù)。

應(yīng)用場景

匿名函數(shù)的應(yīng)用廣泛,尤其是在以下兩種情況下:

1. 回調(diào)函數(shù):匿名函數(shù)常作為回調(diào)函數(shù)使用,尤其是在處理異步操作時(shí)。例如,JavaScript中的事件監(jiān)聽、Go中的channel處理等。

2、匿名函數(shù)代碼示例

  • 匿名函數(shù)被作為回調(diào)來處理異步任務(wù)。
 func() {fmt.Println("異步操作完成!")
}()

鉤子函數(shù)(Hook):鉤子函數(shù)允許在特定事件發(fā)生時(shí)執(zhí)行額外的代碼。匿名函數(shù)可以作為鉤子函數(shù),方便在特定邏輯中插入自定義操作。

type Hook func()func RegisterHook(h Hook) {h()
}func main() {RegisterHook(func() {fmt.Println("執(zhí)行鉤子函數(shù)!")})
}

2、匿名函數(shù)的類型

匿名函數(shù)與命名函數(shù)一樣,也有自己的輸入?yún)?shù)和輸出參數(shù),并且可以像普通函數(shù)一樣進(jìn)行類型定義。匿名函數(shù)的類型由其參數(shù)類型和返回值類型來決定。

? 入?yún)⒑统鰠⒁恢碌暮瘮?shù):如果兩個(gè)匿名函數(shù)的輸入?yún)?shù)和返回值類型完全相同,我們稱這兩個(gè)函數(shù)為相同類型的匿名函數(shù)。即使它們的具體實(shí)現(xiàn)不同,只要入?yún)⒑统鰠⑾嗤?#xff0c;它們就可以互換使用。

? 函數(shù)體不同:類型相同的匿名函數(shù)不代表它們的具體實(shí)現(xiàn)邏輯必須一樣。即使兩個(gè)匿名函數(shù)的入?yún)?、出參相?#xff0c;它們在處理邏輯上的實(shí)現(xiàn)可以完全不同。

二、遞歸函數(shù)

遞歸(Recursion)是一種 函數(shù)自己調(diào)用自己 的編程技巧,通常用于解決 分解問題重復(fù)子問題 的場景,比如 階乘、斐波那契數(shù)列、樹遍歷 等。

遞歸的關(guān)鍵點(diǎn)

1.邊界條件(Base Case): 防止無限遞歸,確保遞歸能終止。

2.遞歸前進(jìn)(Recursive Case): 遞歸調(diào)用自身,逐步逼近邊界條件。

3.遞歸返回(Return Phase): 當(dāng)達(dá)到邊界條件時(shí),返回結(jié)果,逐層回溯。

遞歸實(shí)現(xiàn)方式
?

1. 遞推公式版本
?

適用于具有明顯的數(shù)學(xué)遞推公式的問題,如 階乘、斐波那契數(shù)列 等。

計(jì)算 n 的階乘(n!)

階乘公式:

n! = n \times (n-1)!, 當(dāng) n > 1 時(shí)

0! = 1, 遞歸終止條件

package mainimport "fmt"// 遞歸實(shí)現(xiàn)階乘
func factorial(n int) int {// 遞歸終止條件if n == 0 {return 1}// 遞歸前進(jìn):n * (n-1)!return n * factorial(n-1)
}func main() {fmt.Println("5 的階乘是:", factorial(5)) // 輸出 120
}

2. 循環(huán)改遞歸

有些遞歸實(shí)現(xiàn)的算法可以改用循環(huán)來提高效率,比如斐波那契數(shù)列。

package mainimport "fmt"// 斐波那契數(shù)列(循環(huán)版)
func fibonacciLoop(n int) int {if n == 0 {return 0}if n == 1 {return 1}a, b := 0, 1for i := 2; i <= n; i++ {a, b = b, a+b}return b
}func main() {fmt.Println("斐波那契數(shù)列前10項(xiàng)(循環(huán)版):")for i := 0; i < 10; i++ {fmt.Print(fibonacciLoop(i), " ")}
}

三、嵌套函數(shù)

1、嵌套函數(shù)用途

邏輯封裝,避免代碼重復(fù)

當(dāng)某些操作只在特定函數(shù)內(nèi)部使用,并且不會被外部調(diào)用時(shí),可以使用嵌套函數(shù)來減少代碼重復(fù),提升代碼可讀性。

2、代碼示例

函數(shù)中定義另外一個(gè)函數(shù),
函數(shù)嵌套形成嵌套作用域
package mainimport "fmt"// 函數(shù)嵌套形成嵌套作用域
func outer() {c := 99var inner = func() {c = 100                         //修改outer的c值,修改完成后會覆蓋outer,其實(shí)修改的outer 上的變量內(nèi)容fmt.Println("inner c==", c, &c) //對outer的c進(jìn)行賦值修改c := c + 1                      //inner的局部變量,外部無法調(diào)用。fmt.Println("inner c==", c, &c)}inner()fmt.Println("outer c==", c, &c)}func main() {outer() //先執(zhí)行inner函數(shù)}

3、作用域 & 變量生存周期

在 Go 語言中,變量的作用域決定了它的 生存周期可訪問性

1. 全局作用域:在 package 級別定義的變量,整個(gè)包都能訪問。

2. 函數(shù)作用域:在函數(shù)內(nèi)定義的變量,只有這個(gè)函數(shù)可以訪問。

3. 嵌套作用域

  • inner() 可以訪問 outer() 的 c(因?yàn)?Go 支持閉包)。
  • 但 inner() 不能修改 outer()c 的地址,只能修改其值。

四、閉包

1、閉包使用場景

閉包使用的原因,解決棧幀消亡后值不能消失。變量從棧中逃逸到堆上,本次調(diào)用的棧消亡,堆不消亡

2、代碼示例

func outer() func() {c := 99 // 變量 c 在 outer 作用域內(nèi)var inner = func() {fmt.Println("1  inner c==", c, &c) // 這里 c 仍然是 outer 作用域的變量}fmt.Println("2   outer c==", c, &c) // 這里打印 outer 內(nèi)的 creturn inner // 返回 inner 函數(shù),但并不調(diào)用它
}

outer() 里定義了 c,然后 inner 函數(shù)捕獲了 c,但 inner 并沒有被執(zhí)行,而是作為返回值返回。

? outer() 先執(zhí)行,打印 c 的值和地址。

? main() 里 fn := outer(),將 inner 賦值給 fn,但 inner 還未執(zhí)行,所以 c 依然沒有被打印或修改。

? fmt.Println(fn) 只是打印 fn 這個(gè)函數(shù)本身的地址,而 inner 仍然未執(zhí)行。

? inner 形成閉包,捕獲 c,并且 c 不會因?yàn)?outer 結(jié)束而消失。

? 只有當(dāng) fn() 被執(zhí)行時(shí),inner 才會訪問 c 并打印它。

? 由于 c 被 inner 捕獲,它存活的時(shí)間超出了 outer 的生命周期(變量逃逸到堆上)。

五、Defer

defer 關(guān)鍵字用于推遲執(zhí)行某個(gè)函數(shù),直到**當(dāng)前函數(shù)返回(正常 return 或 panic 發(fā)生時(shí))**才會執(zhí)行。

1、defer 關(guān)鍵特點(diǎn)

1. 延遲執(zhí)行:defer 語句不會立即執(zhí)行,而是在當(dāng)前函數(shù)返回時(shí)執(zhí)行。

2. 執(zhí)行順序LIFO(后進(jìn)先出),即多個(gè) defer 按照注冊順序的反向順序執(zhí)行。

3. 保證執(zhí)行:無論是正常返回(return)還是異常崩潰(panic),defer 代碼塊都會執(zhí)行。

4. 不執(zhí)行的情況:os.Exit()log.Fatal() 會導(dǎo)致程序立即退出,使 defer 代碼塊無法執(zhí)行。

2、defer 代碼示例

package mainimport "fmt"func main() {defer fmt.Println("1") // 最后執(zhí)行defer fmt.Println("2") // 倒數(shù)第二執(zhí)行defer fmt.Println("3") // 倒數(shù)第三執(zhí)行fmt.Println("start")fmt.Println("stop")
}

代碼輸出結(jié)果:

start

stop

3

2

1

fmt.Println("start") 立即執(zhí)行

? fmt.Println("stop") 立即執(zhí)行

? defer 語句按照 后進(jìn)先出 順序執(zhí)行

3、defer 在 return 之后執(zhí)行

package mainimport "fmt"func test() {defer fmt.Println("defer 執(zhí)行")fmt.Println("函數(shù)內(nèi)執(zhí)行")return
}func main() {test()fmt.Println("函數(shù)返回后執(zhí)行")
}

輸出結(jié)果:

函數(shù)內(nèi)執(zhí)行
defer 執(zhí)行
函數(shù)返回后執(zhí)行

4、defer 綁定的是“實(shí)參值”,執(zhí)行順序遵循 LIFO

package mainimport ("fmt"
)func main() {a := 1024fmt.Println("start ~~~~~~~~~~~~~~")defer fmt.Println(a) // defer 1: 綁定值 1024a++                  // a = 1025defer fmt.Println(a) // defer 2: 綁定值 1025a++                  // a = 1026defer fmt.Println(a) // defer 3: 綁定值 1026a++                  // a = 1027fmt.Println("stop~~~~~~~~~~~~~~~~")
}

輸出結(jié)果

start ~~~~~~~~~~~~~~
stop~~~~~~~~~~~~~~~~
1026
1025
1024

代碼執(zhí)行時(shí),defer 語句在注冊時(shí)就會確定參數(shù)的值,不會受到后續(xù) a 值變化的影響。

defer 語句執(zhí)行時(shí),實(shí)參值已經(jīng)確定

? defer fmt.Println(a) 注冊時(shí),參數(shù) a 當(dāng)前的值會被存下來,后續(xù) a 的變化不會影響 defer 綁定的值。

? 多個(gè) defer 語句按 LIFO 順序執(zhí)行后進(jìn)先出)。

http://aloenet.com.cn/news/35057.html

相關(guān)文章:

  • 電腦裝機(jī)網(wǎng)站網(wǎng)站優(yōu)化的方法有哪些
  • 營銷型網(wǎng)站=企業(yè)登記代理網(wǎng)站關(guān)鍵詞優(yōu)化方法
  • 做網(wǎng)站那個(gè)平臺個(gè)人怎么做免費(fèi)百度推廣
  • wordpress 導(dǎo)入幻燈片優(yōu)化網(wǎng)站建設(shè)
  • 杭州設(shè)計(jì)網(wǎng)站最好的公司東莞seo建站排名
  • 網(wǎng)絡(luò)服務(wù)合同糾紛定義簡述影響關(guān)鍵詞優(yōu)化的因素
  • 海南做房地產(chǎn)網(wǎng)站的網(wǎng)絡(luò)公司seo公司官網(wǎng)
  • 制作官網(wǎng)需要什么條件茶葉seo網(wǎng)站推廣與優(yōu)化方案
  • 網(wǎng)站制作手機(jī)網(wǎng)站成人培訓(xùn)班有哪些課程
  • 網(wǎng)站制作價(jià)格和流程云浮新增確診病例30例
  • 建網(wǎng)站的外包公司百度推廣怎么做步驟
  • wordpress花生殼lamp南京百度seo代理
  • 員工做違法網(wǎng)站seo顧問賺錢嗎
  • 企業(yè)網(wǎng)站內(nèi)容運(yùn)營方案策劃網(wǎng)絡(luò)廣告怎么做
  • 網(wǎng)站建設(shè)項(xiàng)目國內(nèi)外分析報(bào)告長春網(wǎng)站推廣公司
  • 網(wǎng)站建設(shè)優(yōu)化廣告流量關(guān)鍵詞搜索排行榜
  • 做網(wǎng)站引流推廣賺錢一個(gè)2元
  • 網(wǎng)站建設(shè)實(shí)用教程企業(yè)郵箱申請
  • 網(wǎng)站做seo屏蔽搜索關(guān)鍵詞排名監(jiān)控批量查詢
  • 河北涿州網(wǎng)站建設(shè)網(wǎng)絡(luò)營銷是指什么
  • 網(wǎng)站開發(fā)的對聯(lián)株洲疫情最新情況
  • 多種成都網(wǎng)站建設(shè)全網(wǎng)推廣外包公司
  • 珠寶 網(wǎng)站模板免費(fèi)seo快速收錄工具
  • 網(wǎng)站logo怎么修改北京網(wǎng)絡(luò)推廣有哪些公司
  • 建站平臺選擇建議全球訪問量top100網(wǎng)站
  • 網(wǎng)站開發(fā)服務(wù)費(fèi)入什么科目重慶網(wǎng)站快速排名提升
  • 西安專業(yè)網(wǎng)站建設(shè)價(jià)格引擎搜索對人類記憶的影響
  • 門戶網(wǎng)站建設(shè)和檢務(wù)公開情況自查報(bào)告免費(fèi)建一個(gè)自己的網(wǎng)站
  • 網(wǎng)站開發(fā) 保修期網(wǎng)絡(luò)推廣文案怎么寫
  • 會計(jì)實(shí)帳培訓(xùn)上海百度搜索優(yōu)化