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: %+vn", inFunc) // 列印inFunc的指標 fmt.Printf("inFunc ptr: %pn", &inFunc) return inFunc } func main() { // 準備傳入函數的結構 in := Data{ complax: []int{1, 2, 3}, instance: InnerData{ 5, }, ptr: &InnerData{1}, } // 輸入結構的成員情況 fmt.Printf("in value: %+vn", in) // 輸入結構的指標地址 fmt.Printf("in ptr: %pn", &in) // 傳入結構體,返回同型別的結構體 out := passByValue(in) // 輸出結構的成員情況 fmt.Printf("out value: %+vn", out) // 輸出結構的指標地址 fmt.Printf("out ptr: %pn", &out) }
// 用於測試值傳遞效果的結構體 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: %+vn", inFunc) // 列印inFunc的指標 fmt.Printf("inFunc ptr: %pn", &inFunc) return inFunc }程式碼說明如下:
%+v
動詞輸出 inFunc 變數的詳細結構,以便觀察 Data 結構在傳遞前後內部數值的變化情況。// 準備傳入函數的結構 in := Data{ complax: []int{1, 2, 3}, instance: InnerData{ 5, }, ptr: &InnerData{1}, } // 輸入結構的成員情況 fmt.Printf("in value: %+vn", in) // 輸入結構的指標地址 fmt.Printf("in ptr: %pn", &in) // 傳入結構體, 返回同型別的結構體 out := passByValue(in) // 輸出結構的成員情況 fmt.Printf("out value: %+vn", out) // 輸出結構的指標地址 fmt.Printf("out ptr: %pn", &out)程式碼說明如下:
in value: {complax:[1 2 3] instance:{a:5} ptr:0xc042008100}
in ptr: 0xc042066060
inFunc value: {complax:[1 2 3] instance:{a:5} ptr:0xc042008100}
inFunc ptr: 0xc0420660f0
out value: {complax:[1 2 3] instance:{a:5} ptr:0xc042008100}
out ptr: 0xc0420660c0