<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國際加速解決方案。 廣告
                # **Go 指針** Go支持指針!**指針**是內存地址,它能夠提升代碼運行效率但是增加了代碼的復雜度,C程序員深受指針的折磨。在`第2章`中當我們討論不安全的代碼時,就使用過指針,這一節哦我們將深入介紹Go指針的一些難點。另外,當你足夠了解原生Go指針時,其安全性大可放心。 使用指針時,`*`可以獲取指針的值,此操作成為**指針的解引用**,`*`也叫取值操作符;`&`可以獲取非指針變量的地址,叫做取地址操作符。 >Tip: 通常來說,經驗較少的開發者應該盡量少使用指針,因為指針很容易產生難以察覺的bug。 你可以創建一個參數為指針的函數: ```go func getPointer(n *int) { } ``` 同樣,一個函數的返回值也可以為指針: ```go func returnPointer(n int) *int { } ``` `pointers.go`展示了如何安全地使用Go指針,該文件分為4部分,其中第一部分是: ```go package main import "fmt" func getPointer(n *int) { *n = *n * *n } func returnPointer(n int) *int { v := n * n return &v } ``` `getPointer()`的作用是修改傳遞來的參數,而無需返回值。這是因為傳遞的參數是指針,其指向了變量的地址,所以能夠將變量值的改變反映到原值上。 `returnPointer()`的參數是一個整數,返回值是指向整數的指針,盡管這樣看起來并沒有什么用處,但是在第四章中,當我們討論指向結構體的指針以及其他復雜數據結構時,你就會發現這種操作的優勢。 `getPointer()`和`returnPointer()`函數的作用都是求一個整數的平方,區別在于`getPointer()`使用傳遞來的參數存儲計算結果,而`returnPointer()`函數重新聲明了一個變量來存儲運算結果。 第二部分: ```go func main() { i := -10 j := 25 pI := &i pJ := &j fmt.Println("pI memory:", pI) fmt.Println("pJ memory:", pJ) fmt.Println("pI value:", *pI) fmt.Println("pJ memory:", *pJ) ``` `i`和 `j`是整數,`pI`和`pJ`分別是指向`i`和`j`的指針,`pI`是變量的內存地址,`*pI`是變量的值。 第三部分: ```go *pI = 123456 *pI-- fmt.Println("i:", i) ``` 這里我們使用指針`pI`改變了變量`i`的值。 最后一部分代碼: ```go getPointer(pJ) fmt.Println("j:", j) k := returnPointer(12) fmt.Println(*k) fmt.Println(k) } ``` 根據前面的討論,我們通過修改`pJ`的值就可以將改變反映到`j`上,因為`pJ`指向了`j`變量。我們將`returnPointer()`的返回值賦值給指針變量`k`。 運行`pointers.go`的輸出是: $ go run pointers.go pI memory: 0xc420014088 pJ memory: 0xc420014090 pI value: -10 pJ memory: 25 i: 123455 j: 625 144 0xc4200140c8 你可能對`pointers.go`中的某些代碼感到困惑,因為我們在第六章才開始討論函數及函數定義,可以去了解關于函數的更多信息。 >Tip: 在Go中字符串是數值類型而不是指針這和C語言不一樣。
                  <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>

                              哎呀哎呀视频在线观看