<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 功能強大 支持多語言、二開方便! 廣告
                ## 一、Golang 可變參數 函數方法的參數,可以是任意多個,這種我們稱之為可以變參數,比如我們常用的fmt.Println()這類函數,可以接收一個可變的參數。 可以變參數,可以是任意多個。我們自己也可以定義可以變參數,可變參數的定義,在類型前加上省略號…即可。 ~~~go func main() { print("1","2","3") } func print (a ...interface{}){ for _,v:=range a{ fmt.Print(v) } fmt.Println() } ~~~ ## 二、Slice和數組的對比 在 Go 中,與 C 數組變量隱式作為指針使用不同,Go 數組是值類型,賦值和函數傳參操作都會復制整個數組數據。假想每次傳參都用數組,那么每次數組都要被復制一遍。如果數組大小有 100萬,在64位機器上就需要花費大約 800W 字節,即 8MB 內存。這樣會消耗掉大量的內存。 于是乎有人想到,函數傳參用數組的指針。這樣更加高效的利用內存,性能也比之前的好。 不過傳指針會有一個弊端,萬一原數組的指針指向更改了,那么函數里面的指針指向都會跟著更改。 切片的優勢也就表現出來了。用切片傳數組參數,既可以達到節約內存的目的,也可以達到合理處理好共享內存的問題。打印結果第二行就是切片,切片的指針和原來數組的指針是不同的。 并非所有時候都適合用切片代替數組,因為切片底層數組可能會在堆上分配內存,而且小數組在棧上拷貝的消耗也未必比 make 消耗大。 ## 三、Golang Slice的底層實現 切片是基于數組實現的,它的底層是數組,它自己本身非常小,可以理解為對底層數組的抽象。因為基于數組實現,所以它的底層的內存是連續分配的,效率非常高,還可以通過索引獲得數據,可以迭代以及垃圾回收優化。 切片本身并不是動態數組或者數組指針。它內部實現的數據結構通過指針引用底層數組,設定相關屬性將數據讀寫操作限定在指定的區域內。切片本身是一個只讀對象,其工作機制類似數組指針的一種封裝。 切片對象非常小,是因為它是只有3個字段的數據結構: 指向底層數組的指針 切片的長度 切片的容量 這3個字段,就是Go語言操作底層數組的元數據。 ## 四、Golang Slice的擴容機制,有什么注意點? Go 中切片擴容的策略是這樣的: 首先判斷,如果新申請容量大于2倍的舊容量,最終容量就是新申請的容量 否則判斷,如果舊切片的長度小于1024,則最終容量就是舊容量的兩倍 否則判斷,如果舊切片長度大于等于1024,則最終容量從舊容量開始循環增加原來的 1/4, 直到最終容量大于等于新申請的容量 [推薦1](https://blog.csdn.net/qq_35526714/article/details/114280569) [推薦2](https://blog.csdn.net/weixin_46305978/article/details/123380358)
                  <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>

                              哎呀哎呀视频在线观看