<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### 用 defer 打印日志 本節將介紹與日志記錄相關的`defer`應用。該技術的目的是幫助你更好地組織功能的日志記錄信息。該試例程序的名稱是`logDefer.go`,它將分為三個部分。 第一部分代碼: ```Go package main import ( "fmt" "log" "os" ) var LOGFILE = "/tmp/mGo.log" func one(aLog *log.Logger) { aLog.Println("-- FUNCTION one ------") defer aLog.Println("-- FUNCTION one ------") for i := 0; i < 10; i++ { aLog.Println(i) } } ``` 名為`one()`的函數正在使用`defer`來確保第二個`aLog.Println()`調用將在該函數即將返回之前執行。因此,該函數的所有日志消息都將被嵌入在打開`aLog.Println()`和關閉`aLog.Println()`之間。這樣,在日志文件中查看該功能的日志消息就會容易得多。 第二部分代碼: ```Go func two(aLog *log.Logger) { aLog.Println("---- FUNCTION two") defer aLog.Println("FUNCTION two ------") for i := 10; i > 0; i-- { aLog.Println(i) } } ``` 名為`two()`的函數仍然使用`defer`方便地對其日志消息進行分組。但是,這次`two()`使用的消息格式與函數`one()`略有不同,不過這完全取決于你。 最后一部分代碼: ```Go func main() { f, err := os.OpenFile(LOGFILE,os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { fmt.Println(err) return } defer f.Close() iLog := log.New(f, "logDefer ", log.LstdFlags) iLog.Println("Hello there!") iLog.Println("Another log entry!") one(iLog) two(iLog) } ``` 執行`logDefer.go`將不會在控制臺產生輸出。但是,查看程序正在使用的日志文件`/tmp/mGo.log`的內容,你就知道`defer`到底有多方便了: ```shell $ cat /tmp/mGo.log logDefer 2019/01/19 21:15:11 Hello there! logDefer 2019/01/19 21:15:11 Another log entry! logDefer 2019/01/19 21:15:11 -- FUNCTION one ------ logDefer 2019/01/19 21:15:11 0 logDefer 2019/01/19 21:15:11 1 logDefer 2019/01/19 21:15:11 2 logDefer 2019/01/19 21:15:11 3 logDefer 2019/01/19 21:15:11 4 logDefer 2019/01/19 21:15:11 5 logDefer 2019/01/19 21:15:11 6 logDefer 2019/01/19 21:15:11 7 logDefer 2019/01/19 21:15:11 8 logDefer 2019/01/19 21:15:11 9 logDefer 2019/01/19 21:15:11 -- FUNCTION one ------ logDefer 2019/01/19 21:15:11 ---- FUNCTION two logDefer 2019/01/19 21:15:11 10 logDefer 2019/01/19 21:15:11 9 logDefer 2019/01/19 21:15:11 8 logDefer 2019/01/19 21:15:11 7 logDefer 2019/01/19 21:15:11 6 logDefer 2019/01/19 21:15:11 5 logDefer 2019/01/19 21:15:11 4 logDefer 2019/01/19 21:15:11 3 logDefer 2019/01/19 21:15:11 2 logDefer 2019/01/19 21:15:11 1 logDefer 2019/01/19 21:15:11 FUNCTION two ------ ```
                  <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>

                              哎呀哎呀视频在线观看