久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

go語言中函數是什么意思

在go語言中,函數是組織好的、可重復使用的、用來實現單一具體或相關聯功能的代碼段(塊);其主要目的是提高應用的模塊性和代碼的重復利用率,更好的管理代碼,模塊化開發。函數通常使用參數和返回值,與調用者交互數據;參數給函數傳遞數據,返回值,函數將處理好的數據傳遞給調用者。

go語言中函數是什么意思

php入門到就業線上直播課:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調試工具:點擊使用

本教程操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

函數是組織好的、可重復使用的、用來實現單一或相關聯功能的代碼段,其可以提高應用的模塊性和代碼的重復利用率。

函數概述

函數,function,獨立的,用于實現具體功能的代碼塊。主要目的,是代碼的重用(重復使用),更好的管理代碼,模塊化開發。 函數通常使用參數和返回值,與調用者交互數據。參數給函數傳遞數據,返回值,函數將處理好的數據傳遞給調用者。 Go語言中函數被稱為一等公民(first-class)。意味著支持高階函數,支持匿名函數,支持閉包等特性,可以滿足接口等高級函數特性。

函數定義

函數構成了代碼執行的邏輯結構,在Go語言中,函數的基本組成為:關鍵字 func、函數名、參數列表、返回值、函數體和返回語句,每一個程序都包含很多的函數,函數是基本的代碼塊。

語法:

  • 定義:

func 函數名(形參列表)(返回值類型列表) {   函數體,通常會有return語句,返回值 }
登錄后復制

  • 調用:

函數名(實參列表)
登錄后復制

函數名:函數的標識符,用于找到函數,內部是一個指向函數代碼的地址。 形參列表:由變量和類型構成 返回值類型列表:函數返回值的類型,多個返回值需要指定多個。 函數體:實現函數功能的具體語句。 return語句:返回值語句

以上定的為命名函數,不能定義在其他函數內部。

函數參數

用于在調用函數時向函數傳遞數據。 實參,實際參數。調用時給的參數。指的是具有的特定實際數據的參數。 形參,形式參數。定義時使用的參數。指的是用來表示函數需要參數,而定義時參數是沒有任實際何數據的。 當調用時會發生使用實參為形參變量賦值的過程,稱為參數的傳遞。在函數的執行期間,形參是有具體數據的,形參當于函數內聲明的變量。

參數的傳遞,分為值傳遞,地址傳遞兩種方式。地址傳遞時,需要形參定義為指針類型,調用時需要取得地址傳參。示例代碼:

func funcTest(p1 int, p2 *int) {   p1++   *p2++   fmt.Println(p1, *p2) } func main() {   var (     a1 = 42     a2 = 42   )   funcTest(a1, &a2)   // 參數賦值過程   fmt.Println(a1, a2) }
登錄后復制

以上會輸出

43 43 42 43
登錄后復制

值傳遞,函數會得到實參的一份拷貝。地址傳遞,函數會得到實參地址,這樣函數內通過地址對變量的修改,同時影響實參。

Go支持rest…不定數量參數,定義時將不定數量形參放在形參列表的最后定義,使用 …Type的方式,演示:

定義: func funcTest(op string, nums ...int) {   fmt.Println(nums) // [4, 1, 55, 12], slice切片型數據 } 調用 funcTest("someOp", 4, 1, 55, 12)
登錄后復制

接收到的參數為slice切片類型。

函數返回值

return語句用于生成返回值。需要在函數定義時確定返回值類型,支持多值返回。演示語法:

func funcTest() (int, string) {   return 42, "Hank" }
登錄后復制

可以在定義時,聲明返回的變量。這個做法叫命名返回,演示為:

func funcTest() (num int, title string) {   num = 42   title = "Hank"   return }
登錄后復制

不用return任何數據,直接return即可!

函數變量

函數可以看作一種特殊的指針類型,可以和其他類型一樣被保存在變量中。通過函數標識符和變量都可以訪問到該函數,演示如下:

func funcTest() {   fmt.Println("func() type") } func main() {   fmt.Printf("%T, (%v)n", funcTest, funcTest)   fn := funcTest   fmt.Printf("%T, (%v)n", fn, fn)   funcTest()   fn() }
登錄后復制

執行結果:

func(), (0x48fe20) func(), (0x48fe20) func() type func() type
登錄后復制

可見,函數標識符就是指向函數的指針??梢再x值給其他變量。

函數參數

函數也可以作為其他函數的參數來使用,演示如下:

func funcSuccess() { } func funcAsync(handle func()) {   // 調用函數參數   handle() } // 傳遞函數到其他函數 funcAsync(success)
登錄后復制

這種回調函數的使用語法,在處理異步邏輯時十分有用。

匿名函數

可以定義匿名函數??梢詫⒛涿瘮当4娴阶兞恐?,作為參數傳遞,或者立即調用。如果函數時臨時使用函數,則匿名函數是一個好選擇。示例語法:

賦值給變量 fn := func() { } fn()  // 作為參數 someFunc(func() {   })  // 立即調用 func() {   }()
登錄后復制

閉包

由于匿名函數可以定義在其他函數內,同時變量的作用域為層疊的,也就是匿名函數可以會訪問其所在的外層函數內的局部變量。當外層函數運行結束后,匿名函數會與其使用的外部函數的局部變量形成閉包。示例代碼:

var fn func() func outer() {   v := 42   fn = func() {     v ++     fmt.Print(v)   } }  outer() fn() // 43
登錄后復制

此例中,fn 對應的匿名函數與 outer() 的局部變量 v,就形成了閉包。

函數調用示意圖

var v = "global" func funcTest(v) {   v = "funcTest"   fmt.Println(v) } func main() {   v := "main"   funcTest(v) }
登錄后復制

代碼編譯期間,會將函數代碼存放在內存代碼區。 函數被調用時,在運行期間會在函數運行棧區開辟函數棧,內部由局部變量標識符列表(就是局部變量),上層標識符列表引用等信息。直到運行結束,此空間才會被出棧,釋放。 函數內部調用了新函數,新函數的執行空間入棧,要等到新函數執行空間出棧,調用他的函數才會被出棧。 以上代碼的運行邏輯圖如下:

go語言中函數是什么意思

遞歸調用

函數內部調用函數本身。稱之為遞歸調用。示例代碼:

func funcTest() {   fmt.Println("run")   funcTest() }
登錄后復制

定義實現遞歸調用函數時,通常需要定義一個出口。用來確定何時不再進行遞歸調用了。一旦滿足條件,則調用停止。例如:

func funcTest(v) {   fmt.Println(v, "run")   v ++   if v <= 10 {     funcTest()   } }
登錄后復制

典型的應用有,樹狀菜單的處理,遍歷目錄,快速排序等。 遞歸調用的優勢是編碼簡單,與描述的業務邏輯保持一致。

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
国产日韩精品视频一区二区三区| 香蕉久久一区| 久久电影tv| 激情久久久久久久| 日韩亚洲精品在线| 日本亚洲视频在线| 国产一区调教| 91精品观看| 欧美亚洲tv| 久久国产免费| 日韩三级精品| 福利精品在线| 久久xxxx精品视频| 91成人精品观看| 国产欧洲在线| 日韩中文字幕1| 精品亚洲a∨| 亚洲欧美成人综合| 国产精品免费不| 国产韩日影视精品| 国产精品一区二区精品| 一区二区小说| 国产伦精品一区二区三区千人斩 | 亚洲精品极品| 国产在线观看www| 亚洲精品动态| 日韩中文欧美| 日韩三级一区| 激情五月综合网| 久久不见久久见中文字幕免费| 美女毛片一区二区三区四区 | 97久久精品| 欧美日韩一区二区综合 | 欧美精品91| 亚洲少妇自拍| 国产在线不卡一区二区三区| 美女被久久久| 成人羞羞视频播放网站| 日韩高清一区在线| 国产一区亚洲| 福利在线一区| 国产日韩欧美一区在线| 免费日韩av片| 欧美成人基地| 免费视频一区二区三区在线观看| 亚洲一区久久| 日韩在线二区| 久久国产精品美女| 一二三区精品| 亚洲天堂久久| 色综合五月天| 欧美日韩夜夜| 噜噜噜躁狠狠躁狠狠精品视频| 国产伦久视频在线观看| 国产欧美一区二区色老头| 蜜乳av另类精品一区二区| 日韩免费在线| 国产极品一区| 日韩高清不卡一区二区| 欧美资源在线| 99国内精品| 国产一区日韩一区| 日韩中文在线电影| 精品一区二区三区的国产在线观看| 天海翼精品一区二区三区| 91久久中文| 91九色精品| 日韩精品一区二区三区免费观看| 精品免费av| 美女尤物国产一区| 国产精品天天看天天狠| 日韩精品免费视频一区二区三区| 日韩在线观看一区二区| 影院欧美亚洲| 欧美日韩视频| 欧美1区2区3区| 久久精品官网| 成人羞羞视频在线看网址| 国产精品亚洲欧美日韩一区在线| 色综合视频一区二区三区日韩| 麻豆成人在线| 亚洲一区二区免费在线观看| 男女性色大片免费观看一区二区| 欧美日韩日本国产亚洲在线 | 老牛影视精品| 精品国产午夜肉伦伦影院| 欧美黑人做爰爽爽爽| 国产乱子精品一区二区在线观看 | 日本欧美一区二区在线观看| 亚洲乱码视频| 亚州欧美在线| 日韩不卡免费视频| 欧美午夜网站| 国产精品草草| 麻豆精品视频在线观看免费| 免费在线欧美黄色| 国产一区二区三区四区大秀| 美腿丝袜亚洲一区| 精品国产a一区二区三区v免费| 麻豆国产一区| 97精品国产福利一区二区三区| 成人av三级| 亚洲精品一区三区三区在线观看| 欧美日韩精品免费观看视完整| 日本蜜桃在线观看视频| 日韩欧美自拍| 99久久久久| 国产一区导航| 亚洲精品日本| 国产精品欧美在线观看| 国产精品成久久久久| 日韩一区欧美| 黄色日韩在线| 日韩精品1区2区3区| 日韩在线电影| 蜜桃久久久久| 久久天堂成人| 亚洲欧美日本日韩| 91精品国产经典在线观看| 麻豆精品av| 亚洲v在线看| 日韩中文字幕亚洲一区二区va在线| 日韩不卡一区二区三区| 电影91久久久| 精品日韩毛片| 日韩视频1区| 福利精品一区| 国产精品日本欧美一区二区三区| 亚洲香蕉久久| 美女精品视频在线| 久久久人人人| 亚洲精品美女| 久久精品人人| 亚洲香蕉网站| 日韩精品一区二区三区中文字幕| 欧美国产极品| 欧美日韩在线二区| 日本不卡一区二区三区| 精品国产鲁一鲁****| 一区二区三区四区在线看| 亚洲区欧美区| 精品国产aⅴ| 日韩精品一区第一页| 老司机精品视频在线播放| 成人羞羞视频在线看网址| 亚洲图片久久| 国产一区二区三区视频在线| 蜜桃视频欧美| 国产乱人伦精品一区| 中文字幕系列一区| 青青青国产精品| 久久精品国内一区二区三区水蜜桃| 亚洲在线久久| 高清日韩中文字幕| 综合激情网站| 蜜桃av在线播放| 日韩区欧美区| 亚洲国产影院| 麻豆精品久久久| 亚洲欧美日韩国产一区| 久久久久九九精品影院| 午夜在线视频一区二区区别| 嫩草伊人久久精品少妇av杨幂| 亚洲黄色在线| 精品99久久| 亚洲精品影视| 久久精品国产亚洲夜色av网站| 国产美女视频一区二区| 国产免费成人| 98精品久久久久久久| 综合亚洲色图| 亚洲高清激情| 久久精品一本| 日本不卡一二三区黄网| 久久精品国产99久久| 国产精东传媒成人av电影| 亚洲综合日韩| 日韩欧美网址| 国产欧美丝祙| 蜜臀久久久99精品久久久久久| 日韩中文影院| 国产精品麻豆成人av电影艾秋| 久久亚洲一区| 久久免费高清| 国产成人精品一区二区三区免费 | 婷婷激情久久| 国产成人精品一区二区三区免费| 亚洲精品大片| 尹人成人综合网| 亚洲成人国产| 98精品视频| 欧美成人一二区| 日韩美女国产精品| 久久电影一区| 亚洲精品a级片| 色婷婷精品视频| 久草免费在线视频| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 国产亚洲一级| 久久久久久久久久久妇女|