go語言:函數參數傳遞詳解

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

參數傳遞是指在程式的傳遞過程中,實際參數就會將參數值傳遞給相應的形式參數,然後在函數中實現對資料處理和返回的過程。比較常見的參數傳遞有:值傳遞,按地址傳遞參數或者按數組傳遞參數。

1、常規傳遞

使用普通變數作為函數參數的時候,在傳遞參數時只是對變數值得拷貝,即將實參的值複製給變參,當函數對變參進行處理時,並不會影響原來實參的值。

例如:

package main

 

import (

    "fmt"

)

func swap(a int, b int) {

    var temp int

    temp = a

    a = b

    b = temp

}

func main() {

    x := 5

    y := 10

    swap(x, y)

    fmt.Print(x, y)

}

輸出結果:5 10

傳遞給swap的是x,y的值得拷貝,函數對拷貝的值做了交換,但卻沒有改變x,y的值。

 

2、指標傳遞

    函數的變數不僅可以使用普通變數,還可以使用指標變數,使用指標變數作為函數的參數時,在進行參數傳遞時將是一個地址看唄,即將實參的記憶體位址複製給變參,這時對變參的修改也將會影響到實參的值。

我們還是用上面的的例子,稍作修改如下:

package main

import (

    "fmt"

)

func swap(a *int, b *int) {

    var temp int

    temp = *a

    *a = *b

    *b = temp

}

func main() {

    x := 5

    y := 10

    swap(&x, &y)

    fmt.Print(x, y)

}

輸出結果:10 5

3、數組元素作為函數參數

使用數組元素作為函數參數時,其使用方法和普通變數相同,即是一個“值拷貝”。

例:

package main

import (

    "fmt"

)

func function(a int) {

    a += 100

}

func main() {

    var s = [5]int{1, 2, 3, 4, 5}

    function(s[2])

    fmt.Print(s[2])

}

輸出結果:3

可以看到將數組元素s[2]的值作為函數的實參,不管對形參做什麼操作,實參都沒有改變。

4、數組名作為函數參數

和其他語言不同的是,go語言在將數組名作為函數參數的時候,參數傳遞即是對數組的複製。在形參中對數組元素的修改都不會影響到數組元素原來的值。這個和上面的類似,就不貼代碼了,有興趣的自行編寫代碼測試下吧。

5、slice作為函數參數

在使用slice作為函數參數時,進行參數傳遞將是一個地址拷貝,即將底層數組的記憶體位址複製給參數slice。這時,對slice元素的操作就是對底層數組元素的操作。例如:

package main

import (

    "fmt"

)

func function(s1 []int) {

    s1[0] += 100

}

func main() {

    var a = [5]int{1, 2, 3, 4, 5}

    var s []int = a[:]

    function(s)

    fmt.Println(s[0])

}

運行結果:101

6、函數作為參數

在go語言中,函數也作為一種資料類型,所以函數也可以作為函數的參數來使用。例如:

package main

import (

    "fmt"

)

func function(a, b int, sum func(int, int) int) {

    fmt.Println(sum(a, b))

}

func sum(a, b int) int {

    return a + b

}

func main() {

    var a, b int = 5, 6

    f := sum

    function(a, b, f)

}

運行結果:11

函數sum作為函數function的形參,而變數f是一個函數類型,作為function()調用時的實參。

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.