最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang中的參數(shù)傳遞示例詳解

 更新時間:2017年09月08日 10:07:32   作者:tomorrowwu  
參數(shù)傳遞是指在程序的傳遞過程中,實際參數(shù)就會將參數(shù)值傳遞給相應(yīng)的形式參數(shù),然后在函數(shù)中實現(xiàn)對數(shù)據(jù)處理和返回的過程,下面這篇文章主要給大家介紹了關(guān)于Golang中參數(shù)傳遞的相關(guān)資料,需要的朋友可以參考下。

前言

本文主要給大家介紹了關(guān)于Golang參數(shù)傳遞的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細的介紹吧。

關(guān)于參數(shù)傳遞,Golang文檔中有這么一句:

after they are evaluated, the parameters of the call are passed by value to the

function and the called function begins execution.

函數(shù)調(diào)用參數(shù)均為值傳遞,不是指針傳遞或引用傳遞。經(jīng)測試引申出來,當(dāng)參數(shù)變量為指針或隱式指針類型,參數(shù)傳遞方式也是傳值(指針本身的copy)

Slice是最常用的數(shù)據(jù)結(jié)構(gòu)之一,下面以Slice為例,解釋Golang的參數(shù)傳遞機制。

Slice數(shù)據(jù)結(jié)構(gòu)如下:

示例代碼:

package main

import "fmt"

func main(){
 slice := make([]int, 3, 5)
 fmt.Println("before:", slice)
 changeSliceMember(slice)
 fmt.Println("after:", slice)
}

func changeSliceMember(slice []int) {
 if len(slice) > 1 {
 slice[0] = 9
 }
}

函數(shù)執(zhí)行結(jié)果為:

befor:[0 0 0]
after:[9 0 0]

解釋:

從數(shù)據(jù)結(jié)構(gòu)圖中可看出,Slice可以理解成結(jié)構(gòu)體類型,包含底層數(shù)組首元素地址、數(shù)組len、容量三個字段,slice對象在參數(shù)傳值過程中,把三個字段的值傳遞過去了,實際上changeSliceMember函數(shù)內(nèi)slice在內(nèi)存中的地址和main中的slice內(nèi)存地址不一樣,只是字段值是一樣的,而第一個字段Pointer的值就是底層數(shù)組首元素地址,因此可以直接改變元素內(nèi)容

可以與下面代碼做對比,理解:

package main

func main() {
 value := new(int)
 modifyFunc(value)
 println("main:", value)
}

func modifyFunc(value *int) {
 value = nil
 println("modifyFunc:", value)
}

執(zhí)行結(jié)果:

modifyFunc: 0x0
main: 0xc820049f30

可以看出,即使傳值為指針,仍未改變變量value在main中的值,因為modifyFunc中value的值為指針,和main中的value值一樣,但是倆對象本身是兩個對象,讀者可以細細體會

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 重學(xué)Go語言之如何使用Context

    重學(xué)Go語言之如何使用Context

    Context,中文也叫做上下文,Go語言在1.7版本中新增的context包中定義了Context,下面我們就來一起看看如何在Go語言中使用Context吧
    2023-07-07
  • 深入理解go unsafe用法及注意事項

    深入理解go unsafe用法及注意事項

    go雖然是一種高級語言,但是也還是給開發(fā)者提供了指針的類型unsafe.Pointer,我們可以通過它來直接讀寫變量的內(nèi)存,本文來了解一下?unsafe?里所能提供的關(guān)于指針的一些功能,以及使用unsafe.Pointer的一些注意事項
    2024-01-01
  • 淺析golang如何處理json中的null

    淺析golang如何處理json中的null

    json?是一種常用的數(shù)據(jù)格式,在?go?使用?json?序列化和反序列化時比較方便的,但在使用過程中,會遇到一些問題,比如?null,所以下面我們就來看看golang如何處理json中的null吧
    2023-09-09
  • Go語言實現(xiàn)二維數(shù)組的2種遍歷方式以及案例詳解

    Go語言實現(xiàn)二維數(shù)組的2種遍歷方式以及案例詳解

    這篇文章主要介紹了Go語言實現(xiàn)二維數(shù)組的2種遍歷方式以及案例詳解,圖文代碼聲情并茂,有感興趣的可以學(xué)習(xí)下
    2021-03-03
  • go slice 數(shù)組和切片使用區(qū)別示例解析

    go slice 數(shù)組和切片使用區(qū)別示例解析

    這篇文章主要為大家介紹了go slice 數(shù)組和切片使用區(qū)別示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • Go高級特性探究之對象比較詳解

    Go高級特性探究之對象比較詳解

    在go語言中,要比較兩個對象是否完全相同,我們可以使用三種方法,這篇文章主要為大家介紹了這三種方法的具體實現(xiàn),需要的可以參考一下
    2023-06-06
  • Go語言通過http抓取網(wǎng)頁的方法

    Go語言通過http抓取網(wǎng)頁的方法

    這篇文章主要介紹了Go語言通過http抓取網(wǎng)頁的方法,實例分析了Go語言通過http操作頁面的技巧,需要的朋友可以參考下
    2015-03-03
  • go語言通過反射獲取和設(shè)置結(jié)構(gòu)體字段值的方法

    go語言通過反射獲取和設(shè)置結(jié)構(gòu)體字段值的方法

    這篇文章主要介紹了go語言通過反射獲取和設(shè)置結(jié)構(gòu)體字段值的方法,實例分析了Go語言反射的使用技巧,需要的朋友可以參考下
    2015-03-03
  • go讀取request.Body內(nèi)容踩坑實戰(zhàn)記錄

    go讀取request.Body內(nèi)容踩坑實戰(zhàn)記錄

    很多初學(xué)者在使用Go語言進行Web開發(fā)時,都會遇到讀取 request.Body內(nèi)容的問題,這篇文章主要給大家介紹了關(guān)于go讀取request.Body內(nèi)容踩坑實戰(zhàn)記錄的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • 關(guān)于golang指針的有限操作詳解

    關(guān)于golang指針的有限操作詳解

    傳統(tǒng)意義上來說,指針是一個指向某個確切的內(nèi)存地址的值,這個內(nèi)存地址可以是任何數(shù)據(jù)或代碼的起始地址,在Go語言中有幾種東西可以代表"指針",本文給大家介紹的是關(guān)于golang指針的有限操作,感興趣的同學(xué)可以參考一下
    2023-08-08

最新評論

砚山县| 新密市| 宾阳县| 庐江县| 卢湾区| 合川市| 七台河市| 昭觉县| 崇义县| 大城县| 临江市| 丰顺县| 昭苏县| 历史| 安西县| 介休市| 巴彦淖尔市| 邢台县| 杂多县| 民权县| 平潭县| 南康市| 沙坪坝区| 西峡县| 扶余县| 青浦区| 温泉县| 保亭| 丹凤县| 会东县| 老河口市| 北辰区| 健康| 确山县| 库伦旗| 桑日县| 潜江市| 阳谷县| 高邑县| 安庆市| 民勤县|