go語言中是否引用傳遞

這篇文章主要講解了“go語言中是否引用傳遞”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“go語言中是否引用傳遞”吧!

南山網站建設公司創(chuàng)新互聯公司,南山網站設計制作,有大型網站制作公司豐富經驗。已為南山上千多家提供企業(yè)網站建設服務。企業(yè)網站搭建\外貿網站建設要多少錢,請找那個售后服務好的南山做網站的公司定做!

沒有。Go沒有引用變量,所以Go語言里調用函數的時也沒有引用傳遞。Go程序中定義的每個變量都占用一個惟一的內存位置,創(chuàng)建兩個共享同一內存位置的變量是不可能的;可以創(chuàng)建兩個指向同一內存位置的變量,不過這與兩個變量共享同一內存位置是不同的。

需要明確的是,Go 沒有引用變量,所以 Go 語言里調用函數的時也沒有引用傳遞。

什么是引用變量?

在一些開發(fā)語言中(比如 C++),對已存在的變量可以聲明別名,這種別名稱為引用變量。

 #include <stdio.h>
 
 int main() {
        int a = 10;
         int &b = a;
         int &c = b;
 
         printf("%p %p %p\n", &a, &b, &c); // 0x7ffe114f0b14 0x7ffe114f0b14 0x7ffe114f0b14
         return 0;
}

可以看到 a、b 和 c 都指向相同的內存位置。對 a 的寫操作會影響 b 和 c。當你想在不同的范圍內聲明引用變量時,這是很有用的——即函數調用時。

Go 語言沒有引用變量

與 C++ 不同,Go 程序中定義的每個變量都占用一個惟一的內存位置。

package main

import "fmt"

func main() {
        var a, b, c int
        fmt.Println(&a, &b, &c) // 0x1040a124 0x1040a128 0x1040a12c
}

創(chuàng)建兩個共享同一內存位置的變量是不可能的??梢詣?chuàng)建兩個指向同一內存位置的變量,不過這與兩個變量共享同一內存位置是不同的。

 package main
 
 import "fmt"
 
 func main() {
        var a int
        var b, c = &a, &a
        fmt.Println(b, c)   // 0x1040a124 0x1040a124
        fmt.Println(&b, &c) // 0x1040c108 0x1040c110
}

上面這段代碼,b 和 c 都具有相同的值 -- 即變量 a 的地址,但 a、c 存儲在內存中不同的位置。改變 b 的內容不會影響到 c。

Maps 與 Channels 是引用變量總該對了吧?

錯!map 和 channel 不是引用,如果是的話下面這段代碼會輸出 false。

package main

import "fmt"

func fn(m map[int]int) {
        m = make(map[int]int)
}

func main() {
        var m map[int]int
        fn(m)
        fmt.Println(m == nil)
}

如果map m 是 C++ 風格的引用變量,則在 main() 聲明的 m 和 在 fn() 聲明的 m 會共享相同的內存空間。但是,因為對 fn() 中 m 賦值不影響 main() 的 m,所以我們可以看出 map 不是引用變量。

感謝各位的閱讀,以上就是“go語言中是否引用傳遞”的內容了,經過本文的學習后,相信大家對go語言中是否引用傳遞這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯,小編將為大家推送更多相關知識點的文章,歡迎關注!

網站題目:go語言中是否引用傳遞
文章網址:http://www.muchs.cn/article6/ishgog.html

成都網站建設公司_創(chuàng)新互聯,為您提供網站排名、建站公司、自適應網站、手機網站建設、用戶體驗、App設計

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

手機網站建設