<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之旅 廣告
                ## 延遲調用(defer) `defer`語句的用途是:含有`defer`語句的函數,會在該函數將要返回之前,調用另一個函數; defer特性: 1. 關鍵字defer 用于注冊延遲調用; 2. defer 不僅限于函數的調用,調用方法也是合法的; 2. 這些調用直到 return 前才被執,因此可以用來做資源清理; 3. 多個defer語句,按先進后出(FILO)的方式執行;哪怕函數或某個延遲調用發生錯誤,這些調用依舊會被執行; 4. defer語句中的變量,在defer聲明時就決定了; 使用場景: 1. 關閉文件句柄 2. 鎖資源釋放 3. 數據庫連接釋放 ### 實參取值(Arguments Evaluation) 在 Go 語言中,并非在調用延遲函數的時候才確定實參,而是當執行`defer`語句的時候,就會對延遲函數的實參進行求值 ~~~go func printA(a int) { fmt.Println("value of a in deferred function", a) } func main() { a := 5 defer printA(a) a = 10 fmt.Println("value of a before deferred function call", a) } ~~~ ### defer 碰上閉包 ~~~ func main() { var whatever [5]struct{} for i := range whatever { defer func() { fmt.Println(i) }() } } ~~~ 函數正常執行,由于閉包用到的變量 i 在執行的時候已經變成4,所以輸出全都是4 ### defer棧 當一個函數內多次調用`defer`時,Go 會把`defer`調用放入到一個棧中,隨后按照后進先出(Last In First Out, LIFO)的順序執行 ~~~ func TestDeferExample(t *testing.T) { defer fmt.Println("clear") defer fmt.Println("release") defer fmt.Println("close") fmt.Println("main goroutine working") } === RUN TestDeferExample main goroutine working close release clear ~~~
                  <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>

                              哎呀哎呀视频在线观看