1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      go語言傳入純指針 go 指針變量

      go語言中指針的使用場景?

      如果該函數(shù)會(huì)修改receiver,此時(shí)一定要用指針

      創(chuàng)新互聯(lián)公司是一家專注于成都做網(wǎng)站、成都網(wǎng)站建設(shè)與策劃設(shè)計(jì),商都網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:商都等地區(qū)。商都做網(wǎng)站價(jià)格咨詢:18982081108

      如果receiver是 struct 并且包含互斥類型 sync.Mutex ,或者是類似的同步變量,receiver必須是指針,這樣可以避免對象拷貝

      如果receiver是較大的 struct 或者 array ,使用指針則更加高效。多大才算大?假設(shè)struct內(nèi)所有成員都要作為函數(shù)變羨晌量傳進(jìn)去,如果覺得這時(shí)數(shù)據(jù)太多,就是struct太大

      如果receiver是 struct , array 或者 slice ,并且其中某個(gè)element指向了某個(gè)可變量,則這個(gè)時(shí)候receiver選指針兄汪鋒會(huì)使代碼的意圖更加明顯

      如陵租果receiver使較小的 struct 或者 array ,并且其變量都是些不變量、常量,例如 time.Time ,value receiver更加適合,因?yàn)関alue receiver可以減少需要回收的垃圾量。

      怎么樣使用Go語言中函數(shù)的參數(shù)傳遞與調(diào)用

      按值傳遞函數(shù)參數(shù),是拷貝參數(shù)的實(shí)際值到函數(shù)的形式參數(shù)的方法調(diào)用。在這種情況下,參數(shù)在函數(shù)內(nèi)變化對參數(shù)不會(huì)有影響。

      默認(rèn)情況下,Go編程語言使用調(diào)用通過值的方法來傳遞參數(shù)。在一般情況下,這意味著,在函數(shù)內(nèi)碼不能改變用來調(diào)用所述函數(shù)的參數(shù)。考慮函數(shù)swap()的定義如下。

      代碼如下:

      /* function definition to swap the values */

      func swap(int x, int y) int {

      var temp int

      temp = x /* save the value of x */

      x = y /* put y into x */

      y = temp /* put temp into y */

      return temp;

      }

      現(xiàn)在,讓我們通過使實(shí)際值作為在以下示例調(diào)用函數(shù)swap():

      代碼如下:

      package main

      import "fmt"

      func main() {

      /* local variable definition */

      var a int = 100

      var b int = 200

      fmt.Printf("Before swap, value of a : %d\n", a )

      fmt.Printf("Before swap, value of b : %d\n", b )

      /* calling a function to swap the values */

      swap(a, b)

      fmt.Printf("After swap, value of a : %d\n", a )

      fmt.Printf("After swap, value of b : %d\n", b )

      }

      func swap(x, y int) int {

      var temp int

      temp = x /* save the value of x */

      x = y /* put y into x */

      y = temp /* put temp into y */

      return temp;

      }

      讓我們把上面的代碼放在一個(gè)C文件,編譯并執(zhí)行它,它會(huì)產(chǎn)生培茄以下結(jié)果:

      Before swap, value of a :100

      Before swap, value of b :200

      After swap, value of a :100

      After swap, value of b :200

      這表明,參數(shù)值沒有被改變,雖然它們已經(jīng)在函數(shù)內(nèi)部改變。

      通過傳遞函數(shù)參數(shù),即是拷貝參數(shù)的地址到形式參數(shù)的參考方法調(diào)用。在函數(shù)內(nèi)部,地址是訪問調(diào)用中使用的實(shí)際參數(shù)。這意味著,對參數(shù)的更改會(huì)影響傳遞的參數(shù)。

      要通過引用傳遞的值,參數(shù)的指針被傳遞給函數(shù)就像任何其他的值。所以,相應(yīng)的,需困蠢要聲明函數(shù)的參數(shù)為指針類型如下面的函數(shù)swap(),它的交換兩個(gè)配尺察整型變量的值指向它的參數(shù)。

      代碼如下:

      /* function definition to swap the values */

      func swap(x *int, y *int) {

      var temp int

      temp = *x /* save the value at address x */

      *x = *y /* put y into x */

      *y = temp /* put temp into y */

      }

      現(xiàn)在,讓我們調(diào)用函數(shù)swap()通過引用作為在下面的示例中傳遞數(shù)值:

      代碼如下:

      package main

      import "fmt"

      func main() {

      /* local variable definition */

      var a int = 100

      var b int= 200

      fmt.Printf("Before swap, value of a : %d\n", a )

      fmt.Printf("Before swap, value of b : %d\n", b )

      /* calling a function to swap the values.

      * a indicates pointer to a ie. address of variable a and

      * b indicates pointer to b ie. address of variable b.

      */

      swap(a, b)

      fmt.Printf("After swap, value of a : %d\n", a )

      fmt.Printf("After swap, value of b : %d\n", b )

      }

      func swap(x *int, y *int) {

      var temp int

      temp = *x /* save the value at address x */

      *x = *y /* put y into x */

      *y = temp /* put temp into y */

      }

      讓我們把上面的代碼放在一個(gè)C文件,編譯并執(zhí)行它,它會(huì)產(chǎn)生以下結(jié)果:

      Before swap, value of a :100

      Before swap, value of b :200

      After swap, value of a :200

      After swap, value of b :100

      這表明變化的功能以及不同于通過值調(diào)用的外部體現(xiàn)的改變不能反映函數(shù)之外。

      GO 一文搞懂指針和地址值的區(qū)別

      go語言中的指針和地址值,在使用上常常具有迷惑性,主要鋒絕拿是其特殊的宏汪*、符號的使用,可能會(huì)讓你摸不透,本文希望能講清楚go語言的指針(pointer)和值(value)。

      這里先簡單銀搭的對指針和地址值概念做一個(gè)定義:

      這是因?yàn)間o方法傳遞參數(shù)的方式導(dǎo)致的,go方法函數(shù)傳遞參數(shù)傳遞的是一個(gè)拷貝,看看下面的程序會(huì)輸出什么?

      答案是8,而不是9,因?yàn)锳ddAge函數(shù)修改的是學(xué)生的一個(gè)備份,而不是原始的學(xué)生對象

      如果你想正確的給學(xué)生年齡增加的話,函數(shù)傳遞的需要是這個(gè)值的指針,如下所示:

      需要注意的是,這里我們的指針傳遞的仍然是一個(gè)拷貝,比如,如果你將s賦值給另外一個(gè)指針地址,不會(huì)影響原有的指針,這點(diǎn)可以自行實(shí)踐下。

      那在使用go語言開發(fā)的時(shí)候,何時(shí)該用指針何時(shí)改用地址值呢?比如考慮以下場景:

      簡單原則: 當(dāng)你不確定該使用哪種的時(shí)候,優(yōu)先使用指針

      如果考慮在數(shù)組、切片、map等復(fù)合對象中使用指針和值,比如:

      很多開發(fā)者會(huì)認(rèn)為b會(huì)更高效,但是被傳遞的都是一個(gè)切片的拷貝,切片本身就是一個(gè)引用,所以這里被傳遞的其實(shí)沒有什么區(qū)別。

      對于指針和地址值的使用,大家需要牢記的一點(diǎn)就是go數(shù)據(jù)傳遞的不可變性,活學(xué)活用此特點(diǎn),在無狀態(tài)函數(shù)中此特性非常有用。


      新聞標(biāo)題:go語言傳入純指針 go 指針變量
      標(biāo)題來源:http://www.ef60e0e.cn/article/ddpgjdp.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        玛多县| 汕头市| 祥云县| 温泉县| 郴州市| 邻水| 扶沟县| 齐齐哈尔市| 西盟| 九台市| 肃北| 农安县| 大城县| 高安市| 尖扎县| 同心县| 隆安县| 晋中市| 张家界市| 仪陇县| 中超| 惠东县| 利辛县| 铜梁县| 丹江口市| 敖汉旗| 澄迈县| 渭南市| 浦县| 武汉市| 镇江市| 内乡县| 贡觉县| 茌平县| 闽清县| 宁远县| 合川市| 都昌县| 广河县| 光山县| 鄄城县|