<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之旅 廣告
                ## 作用域 一個聲明語句將程序中的實體和一個名字關聯,比如一個函數或一個變量。聲明語句的作用域是指源代碼中可以有效使用這個名字的范圍。 **不要將作用域和生命周期混為一談**。聲明語句的作用域對應的是一個源代碼的文本區域;它是一個編譯時的屬性。一個變量的生命周期是指程序運行時變量存在的有效時間段,在此時間區域內它可以被程序的其他部分引用;是一個運行時的概念。 聲明語句對應的詞法域決定了作用域范圍的大小。對于內置的類型、函數和常量,比如int、len和true等是在全局作用域的,因此可以在整個程序中直接使用。 任何在在函數外部(也就是包級語法域)聲明的名字可以在同一個包的任何源文件中訪問的。 一個程序可能包含多個同名的聲明,只要它們在不同的詞法域就沒有關系。例如,你可以聲明一個局部變量,和包級的變量同名。 當編譯器遇到一個名字引用時,如果它看起來像一個聲明,它首先從最內層的詞法域向全局的作用域查找。如果查找失敗,則報告“未聲明的名字”這樣的錯誤。如果該名字在內部和外部的塊分別聲明過,則內部塊的聲明首先被找到。在這種情況下,內部聲明屏蔽了外部同名的聲明,讓外部的聲明的名字無法被訪問: ## 隱式詞法塊 for0循環,if和switch語句也會在條件部分創建隱式詞法域,還有它們對應的執行體詞法域。在if聲明的變量在else中也可以使用。 ~~~ func main() { if s := show(); s == "world" { fmt.Println("no") } else { fmt.Println(s) } } func show() string { return "hello" } ~~~ 在包級別,聲明的順序并不會影響作用域范圍,因此一個先聲明的可以引用它自身或者是引用后面的一個聲明,這可以讓我們定義一些相互嵌套或遞歸的類型或函數。但是如果一個變量或常量遞歸引用了自身,則會產生編譯錯誤。 ## 短變量聲明容易產生bug的地方 要特別注意短變量聲明語句的作用域范圍,考慮下面的程序,它的目的是獲取當前的工作目錄然后保存到一個包級的變量中。這可以本來通過直接調用os.Getwd完成,但是將這個從主邏輯中分離出來可能會更好,特別是在需要處理錯誤的時候。函數log.Fatalf用于打印日志信息,然后調用os.Exit(1)終止程序。 ~~~ var cwd string func init() { cwd, err := os.Getwd() // compile error: unused: cwd 這里的cwd和包級的cwd沒有關系,這是一個新變量 if err != nil { log.Fatalf("os.Getwd failed: %v", err) } log.Printf("Working directory = %s", cwd) //這里的打印結果會讓這個BUG更加隱晦 } ~~~
                  <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>

                              哎呀哎呀视频在线观看