<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Golang基礎(chǔ)筆記八之函數(shù)

      本文首發(fā)于公眾號:Hunter后端

      原文鏈接:Golang基礎(chǔ)筆記八之函數(shù)

      本篇筆記介紹 Golang 里函數(shù)相關(guān)的內(nèi)容,以下是本篇筆記目錄:

      1. 函數(shù)的定義語法
      2. 函數(shù)返回值
      3. 可變參數(shù)函數(shù)
      4. 匿名函數(shù)
      5. 閉包

      1、函數(shù)的定義語法

      函數(shù)的定義格式如下:

      func 函數(shù)名(參數(shù)列表) (返回值列表) { 函數(shù)體 }
      

      比如下面是一個(gè)兩數(shù)相加返回其和的函數(shù):

      func add(a, b int) int {
          return a + b
      }
      

      調(diào)用的話,直接傳參調(diào)用即可:

      sum := add(1, 4)
      fmt.Println(sum)
      

      傳入的參數(shù)可以傳值,也可以傳指針,如果傳指針的話,在函數(shù)內(nèi)部修改后,會影響原值。

      以下是一個(gè)傳指針修改的示例:

      func test(a *int, b int) {
          *a += 2
          b += 2
      }
      func main() {
          a := 1
          b := 1
          fmt.Printf("調(diào)用前 a:%d, b:%d\n", a, b)
          test(&a, b)
          fmt.Printf("調(diào)用后 a:%d, b:%d\n", a, b)
      }
      

      輸出結(jié)果為:

      調(diào)用前 a:1, b:1
      調(diào)用后 a:3, b:1
      

      2、函數(shù)返回值

      函數(shù)返回值可以返回單個(gè)或多個(gè),在函數(shù)定義的時(shí)候指定返回類型即可:

      func add(a, b int) int {
          return a + b
      }
      func swap(a, b int) (int, int) {
          return b, a
      }
      

      還可以對返回值命名,就是在定義函數(shù)的時(shí)候,將返回值提前聲明定義,然后在函數(shù)內(nèi)部對其賦值,函數(shù)末尾可以省去 return 具體變量的操作。

      比如下面:

      func calc(a, b int) (sum, sub int) {
          sum = a + b
          sub = a - b
          return
      }
      

      3、可變參數(shù)函數(shù)

      可變參數(shù)函數(shù)可以接受任意數(shù)量的參數(shù),在函數(shù)定義的時(shí)候,類型前面加上 ... 即表示該參數(shù)是可變參數(shù),而在函數(shù)內(nèi)部,可將其作為切片使用。

      下面是一個(gè)示例,可以接受任意多個(gè)元素,作為求和函數(shù)的參數(shù):

      func sum(nums ...int) int {
          total := 0
          for _, num := range nums {
              total += num
          }
          return total
      }
      

      調(diào)用的時(shí)候,可以直接傳入任意數(shù)量參數(shù):

      sum(1, 2, 3, 4)
      

      也可以傳入一個(gè)切片:

      slice := []int{1, 2, 3}
      s2 := sum(slice...)
      

      4、匿名函數(shù)

      匿名函數(shù)通常用于臨時(shí)需要處理某個(gè)功能,或需要將其作為參數(shù)傳遞給其他變量的場景。
      比如下面定義并立即調(diào)用了匿名函數(shù):

      total := func(a, b int) int {
          return a + b
      }(2, 4)
      

      也可以將其賦值給某個(gè)變量,再由該變量來調(diào)用:

      sumFunc := func(a, b int) int {
          return a + b
      }
      sumFunc(1, 2)
      

      5、閉包

      閉包是指能夠讀取其他函數(shù)內(nèi)部變量的函數(shù),即使該函數(shù)已經(jīng)執(zhí)行完畢,其作用域內(nèi)的變量也不會被銷毀。

      我們可以使用閉包來捕獲外部函數(shù)的局部變量,并將其生命周期延長至閉包本身,比如實(shí)現(xiàn)一個(gè)計(jì)數(shù)器:

      func counter() func() int {
          count := 0
          return func() int {
              count += 1
              return count
          }
      }
      
      counterFunc := counter()
      fmt.Println(counterFunc())
      fmt.Println(counterFunc())
      fmt.Println(counterFunc())
      fmt.Println(counterFunc())
      

      也可以根據(jù)外部傳入的參數(shù)生成不同的閉包實(shí)例,比如實(shí)現(xiàn)一個(gè)計(jì)算器:

      func calculate(calculate_type string) func(a, b int) int {
          if calculate_type == "add" {
              return func(a, b int) int {
                  return a + b
              }
          } else if calculate_type == "sub" {
              return func(a, b int) int {
                  return a - b
              }
          } else {
              return func(a, b int) int { return a + b }
          }
      }
      
      
      addFunc := calculate("add")
      fmt.Println(addFunc(10, 5))
      
      subFunc := calculate("sub")
      fmt.Println(subFunc(3, 1))
      

      而閉包也可以維護(hù)迭代的狀態(tài),因此可以實(shí)現(xiàn)迭代器的功能,比如實(shí)現(xiàn)一個(gè)斐波那契數(shù)列生成器:

      func fibonacci() func() int {
          a, b := 0, 1
          return func() int {
              f_count := a
              a, b = b, a+b
              return f_count
          }
      }
      
      f := fibonacci()
      fmt.Println(f())
      fmt.Println(f())
      fmt.Println(f())
      fmt.Println(f())
      fmt.Println(f())
      fmt.Println(f())
      
      posted @ 2025-07-02 22:23  XHunter  閱讀(463)  評論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 国产精品 欧美激情 在线播放| 色二av手机版在线| 无套内谢极品少妇视频| 欧美日本在线一区二区三区| 99热精品毛片全部国产无缓冲| 成人亚洲欧美一区二区三区| 日韩AV高清在线看片| 香港日本三级亚洲三级| 亚洲欧洲无码av电影在线观看 | 4hu44四虎www在线影院麻豆| 无套中出极品少妇白浆| 亚洲国产精品线观看不卡| 九九热视频在线观看视频| 国产男女猛烈无遮挡免费视频| 成av人电影在线观看| 国产精品一区二区三区av| 国产午夜91福利一区二区| 中文字幕永久精品国产| 国产成人精品久久一区二区| 亚洲国产一区二区三区久| 亚洲精品无码久久一线| 国产美女免费永久无遮挡| 天美传媒mv免费观看完整| 中文字幕免费不卡二区| 国产精品成人亚洲一区二区| 亚洲成a人片在线观看中| 亚洲 小说区 图片区 都市| 亚洲最大天堂在线看视频| 欧美一区二区| 国产精品久久久久久福利69堂| 九九热在线精品视频免费| 欧美乱人伦人妻中文字幕| 最新精品国产自偷在自线| 久热综合在线亚洲精品| 人妻中文字幕亚洲精品| 国产精品白丝久久AV网站| 强伦姧人妻免费无码电影| 日韩乱码人妻无码中文字幕视频| 国产区一区二区现看视频| 97久久精品人人做人人爽| 成人污视频|