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

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

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

前言

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

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、容量三個(gè)字段,slice對象在參數(shù)傳值過程中,把三個(gè)字段的值傳遞過去了,實(shí)際上changeSliceMember函數(shù)內(nèi)slice在內(nèi)存中的地址和main中的slice內(nèi)存地址不一樣,只是字段值是一樣的,而第一個(gè)字段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中的值,因?yàn)閙odifyFunc中value的值為指針,和main中的value值一樣,但是倆對象本身是兩個(gè)對象,讀者可以細(xì)細(xì)體會

總結(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用法及注意事項(xiàng)

    深入理解go unsafe用法及注意事項(xiàng)

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

    淺析golang如何處理json中的null

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論

沁源县| 赫章县| 湄潭县| 文安县| 南皮县| 固原市| 麻栗坡县| 怀柔区| 丹巴县| 衡水市| 临颍县| 金乡县| 南华县| 沅陵县| 浏阳市| 南丹县| 攀枝花市| 抚宁县| 科尔| 灵石县| 绥芬河市| 融水| 那坡县| 曲阜市| 江陵县| 织金县| 古田县| 墨江| 时尚| 云安县| 临澧县| 肥乡县| 璧山县| 普陀区| 沅陵县| 长海县| 丹凤县| 临汾市| 宿州市| 桓仁| 卢湾区|