Go語言 函數中的參數傳遞實例


  Go語言中傳入與返回參數在調用和返回時都使用值傳遞,這里需要注意的是指針、切片和 map 等引用型對象在參數傳遞中不會發生復制,而是將指針進行復制,類似於創建一次引用。

程序實例:

package main

import "fmt"

type Data struct {
    complax []int //測試切片在參數傳遞的效果

    instance InnerData //實例分配的innerData

    ptr *InnerData //將ptr聲明為InnerData的指針類型
}

//代表各種結構體
type InnerData struct {
    a int
}

func passByValue(inFunc Data) Data {
    //輸出參數成員情況
    fmt.Printf("inFunc value:%+v \n", inFunc)
    //打印inFunc 指針
    fmt.Printf("inFunc value:%p \n", &inFunc)
    return inFunc
}
func main() {
    in := Data{
        complax: []int{1, 2, 3}, //注意逗號不能少,否則報錯
        instance: InnerData{
            5, //注意逗號不能少,否則報錯
        },
        ptr: &InnerData{1}, //注意逗號不能少,否則報錯,這里是值傳遞,指針地址不變
    }
    //輸出結構成員情況
    fmt.Printf("in value: %+v \n", in)
    //輸出結構成員指針情況
    fmt.Printf("in value指針值: %p\n", &in)
    //傳入結構體,返回同類型結構體
    out := passByValue(in)
    //輸出結構成員情況
    fmt.Printf("out value %+v \n", out)
    //輸出結構成員指針情況
    fmt.Printf("out value指針值: %p\n", &out)
}

 

程序輸出:

in value: {complax:[1 2 3] instance:{a:5} ptr:0xc00000a0b0}
in value指針值: 0xc00005e330
inFunc value:{complax:[1 2 3] instance:{a:5} ptr:0xc00000a0b0}
inFunc value:0xc00005e3c0
out value {complax:[1 2 3] instance:{a:5} ptr:0xc00000a0b0}
out value指針值: 0xc00005e390

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM