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

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 5.9\. 初始化 盡管表面看來和 C 或 C++ 的初始化沒什么不同,Go 的更夠強。復雜結構可在初始化時架設,并且不同包的物件的初始化順序問題也得到正確處理。 ### 5.9.1\. Constants 常量初始化 常量在 Go 里是 —— 不變的。它們在編譯時生成,即便是局部定義在函數里。它只能是數,字串或布爾。因為編譯態的限制,定義它們的表達式必須是常量表達式,可以被編譯器求值。例如,1&lt;&lt;3 是常量表達式, math.Sin(math.Pi/4) 不是,因為 math.Sin 的函數調用發生在運行態。 Go 的列舉常量可用 iota 生成。 因為 iota 可以是表達式的一部分,并且表達式可以隱含重復,打造一套精致的值可以變得很容易。 ``` type ByteSize float64 const ( _ = iota // ignore first value by assigning to blank identifier KB ByteSize = 1<<(10*iota) MB GB TB PB EB ZB YB ) ``` 給類型添加比如 String 等方法的本領,使值自動排版打印自己變得可能,即使只作為通用類型的一部分。 ``` func (b ByteSize) String() string { switch { case b >= YB: return fmt.Sprintf("%.2fYB", b/YB) case b >= ZB: return fmt.Sprintf("%.2fZB", b/ZB) case b >= EB: return fmt.Sprintf("%.2fEB", b/EB) case b >= PB: return fmt.Sprintf("%.2fPB", b/PB) case b >= TB: return fmt.Sprintf("%.2fTB", b/TB) case b >= GB: return fmt.Sprintf("%.2fGB", b/GB) case b >= MB: return fmt.Sprintf("%.2fMB", b/MB) case b >= KB: return fmt.Sprintf("%.2fKB", b/KB) } return fmt.Sprintf("%.2fB", b) } ``` 表達式 YB 打印 1.00YB,而 ByteSize(1e13) 打印 9.09TB ### 5.9.2\. 變量初始化 變量和常量的初始化一樣,但可以用運行態計算的普通表達式。 ``` var ( HOME = os.Getenv("HOME") USER = os.Getenv("USER") GOROOT = os.Getenv("GOROOT") ) ``` ### 5.9.3\. init函數 最后,每個源文件可以定義自身的 init() 函數來安排所需的狀態。唯一的限制是,盡管夠程可在初始化時啟動,它們只在初始完成后執行;初始化永遠是單一的執行序列。最后之后,init() 發生在包里所有變量初始化之后,而其又發生在所有的包全部導入之后。 除了初始化不能表示為聲明外,init() 函數常用來在程序運行前驗證或修補其狀態。 ``` func init() { if USER == "" { log.Exit("$USER not set") } if HOME == "" { HOME = "/usr/" + USER } if GOROOT == "" { GOROOT = HOME + "/go" } // GOROOT may be overridden by --goroot flag on command line. flag.StringVar(&GOROOT, "goroot", GOROOT, "Go root directory") } ```
                  <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>

                              哎呀哎呀视频在线观看