這篇文章主要介紹了go值傳遞和地址傳遞的案例,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
創新互聯公司專業為企業提供淅川網站建設、淅川做網站、淅川網站設計、淅川網站制作等企業網站建設、網頁設計與制作、淅川企業網站模板建站服務,十載淅川做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。
先來看個簡單的例子
1、變量前面加個&表示這個變量的地址(也就是這個變量的指針),指針變量前面加*表示這個指針對應的值 (自己理解下)
//main.gopackage main func ByAss() { s := 100 p := &s // s 的地址給了p fmt.Println(*p) //100 所以p對應的值變成了100 *p += 100 fmt.Println(*p) //200 fmt.Println(s) //200 p和s相同的地址,所以s也變成200}//demo.gopackage main func main() { ByAss()}
Go 默認使用按值傳遞來傳遞參數,也就是傳遞參數的副本。函數接收參數副本之后,在使用變量的過程中可能對副本的值進行更改,但不會影響到原來的變量,比如 Function(arg1)。
2、普通值傳遞 (注意這個例子,看起來很簡單,但是容易忽略)
func ByValue1(n1 int) { //此時n1 是n 的一個拷貝,所以地址不一樣 fmt.Println(&n1)//0xc00000a098}package main func main() { n := 100 fmt.Println(&n) //0xc00000a090 ByValue1(n)//傳遞副本}
如果你希望函數可以直接修改參數的值,而不是對參數的副本進行操作,你需要將參數的地址(變量名前面添加 & 符號,比如 &variable)傳遞給函數,這就是按引用傳遞,比如 Function(&arg1),此時傳遞給函數的是一個指針。
3、如果想用地址傳遞
func main() { n := 100 fmt.Println(&n) //0xc00000a090 ByReference(&n) //傳遞指針 fmt.Println(n) //200}//注意函數 參數類型需要是用指針符號(*)func ByReference(n1 *int) { *n1 += 100 fmt.Println(n1)//0xc00000a090 地址與n相同, 所以n值被改變了 //注意 //ip := &n1//這個寫法有問題,表示地址的地址 //fmt.Println(ip)}
4、看下數組
arr := [5]int{1,3,5,6,7}arrByValue(&arr) //也需要使用& 符號fmt.Println(arr) //[100 300 5 6 7]func arrByValue(arr1 *[5]int) { arr2 := arr1 arr2[0] = 100 arr2[1] = 300}
func main() { arr := []int{1,3,5,6,7} bbb(arr) //沒有使用& 符號 fmt.Print(arr[0])// 11 結果已經改變,說明數組是地址傳遞 //就算不通過函數,也是引用傳遞 //arr := []int{1,3,5,6,7} //arr2 := arr //arr2[1] = 0 //fmt.Print(arr)//[1 0 5 6 7]}//aaafunc bbb(arr1 []int) { arr1[0] += 10}
感謝你能夠認真閱讀完這篇文章,希望小編分享go值傳遞和地址傳遞的案例內容對大家有幫助,同時也希望大家多多支持創新互聯,關注創新互聯網站制作公司行業資訊頻道,遇到問題就找創新互聯,詳細的解決方法等著你來學習!
網頁標題:go值傳遞和地址傳遞的案例-創新互聯
路徑分享:http://vcdvsql.cn/article2/dshhic.html
成都網站建設公司_創新互聯,為您提供品牌網站建設、網站內鏈、動態網站、用戶體驗、企業網站制作、面包屑導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯