<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                > ### 函數 function * 函數(不支持 嵌套、重載和默認參數, 可以將函數作為一個值進行賦值) ~~~ package main import "fmt" func add(number1 int, number2 int) (number3 int) { number3 = number1 + number2 return } func subtraction(number1, number2 int) int { number3 := number1 - number2 return number3 } func multiplication(number ...int) int { total := 1 for _, v := range number { total *= v } return total } func demo1() { fmt.Println(add(8, 7)) fmt.Println(subtraction(8, 7)) fmt.Println(multiplication(2, 3, 5, 10)) } func main() { demo1() } ~~~ * 匿名函數(通常不希望再次使用(即只使用一次)的函數可以定義為匿名函數) ~~~ package main import "fmt" func demo2() { //f1為函數地址 f1 := func(x, y int) int { z := x + y return z } fmt.Println(f1) fmt.Println(f1(5, 6)) //直接創建匿名函數并運行 f2 := func(x, y int) int { z := x + y return z }(5, 6) fmt.Println(f2) //直接創建匿名函數并運行(無參數的形式) ()調用匿名函數 func() { fmt.Println(5 + 6) }() } func main() { demo2() } ~~~ * 閉包函數 (函數內在包含子函數,并最終return子函數) ~~~ package main import "fmt" func number1(x int) func(y int) int { return func(y int) int { return x + y } } func number2() func() { return func() { fmt.Println("Hello World!") } } func demo3() { n1 := number1(7) fmt.Println(n1(8)) n2 := number2() n2() } func main() { demo3() } ~~~ * 閉包函數2 ~~~ package main import ( "fmt" ) func Number(i int) func() { return func() { fmt.Println(i) } } func main() { number1 := make([]func(), 3) number2 := make([]func(), 3) //TODO:1 //閉包可以直接使用外部的變量 for i := 0; i < 3; i++ { number1[i] = func() { fmt.Println(i) } } fmt.Println("-----TODO1-----") for _, v := range number1 { v() } //TODO:2 for i := 0; i < 3; i++ { j := i number2[i] = func() { fmt.Println(j) } } fmt.Println("-----TODO2-----") for _, v := range number2 { v() } } ~~~ * 遞歸 ~~~ package main import "fmt" /*棧空間變化(堆棧從左到右,增加到一個峰值后再計算從右到左縮小) demo4(5) 5 + demo4(4) 5 + (4 + demo4(3)) 5 + (4 + (3 + demo4(2))) 5 + (4 + (3 + (2 + demo4(1)))) 5 + (4 + (3 + (2 + 1))) 5 + (4 + (3 + 3)) 5 + (4 + 6) 5 + 10 15 */ func demo4(val int) int { if val > 0 { return val + demo4(val-1) } else { return val } } func main() { fmt.Println(demo4(5)) } ~~~ * 尾遞歸 ~~~ package main import "fmt" /*棧空間變化 demo5(5, 0) demo5(4, 5) demo5(3, 9) demo5(2, 12) demo5(1, 14) demo5(0, 15) 15 */ func demo5(val int, total int) int { if val > 0 { return demo5(val-1, total+val) } else { return total } } func main() { fmt.Println(demo5(5, 0)) } ~~~ * 迭代 ~~~ package main import "fmt" func demo6(number int) int { total := 0 for { if number > 0 { total += number number-- } else { break } } return total } func main() { fmt.Println(demo6(5)) } ~~~ * 回調函數 ~~~ package main import "fmt" type callback func(val, total int) int func demo7(val int, callback callback) int { if val > 0 { return callback(val, 0) } else { return val } } func addFunc(val int, total int) int { if val > 0 { return addFunc(val-1, total+val) } else { return total } } func main() { fmt.Println(demo7(5, addFunc)) } ~~~ > ### 官方建議官方建議寫法(給返回值定義一個名稱) ~~~ func Add(num1, num2 int) (num3 int) { num3 = num1 + num2 return } ~~~ > ### 閉包作用域 ~~~ package main import ( "fmt" ) func main() { number := make([]func(), 3) //閉包可以直接使用外部的變量 //輸出 333 for i := 0; i < 3; i++ { number[i] = func() { fmt.Println(i) } } //閉包函數的變量,后面調用閉包函數的變量 //全局變量 = 變量的最后一個值 //局部變量 = 當前值 /* 輸出 0 1 2 for i := 0; i < 3; i++ { j := i number[i] = func() { fmt.Println(j) } } */ /* 輸出 333 j := 3 for i := 0; i < 3; i++ { number[i] = func() { fmt.Println(j) } } */ /* 輸出0 1 2 for i := 0; i < 3; i++ { number[i] = Number(i) } */ /* for i := 0; i < 3; i++ { number[i] = func() { fmt.Println(i) } number[i]() } */ for _, v := range number { v() } } func Number(i int) func() { return func() { fmt.Println(i) } } ~~~ > ### 相關閱讀 * [閉包函數介紹](http://www.cnblogs.com/leoin2012/p/3978979.html)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看