這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
go語言值傳遞與址傳遞:
- 值傳遞是對源結構體拷貝的操作;
- 址傳遞是對源結構體的操作;
package mainimport ("fmt")type BigStruct struct {C01 uint64}func Invoke1(a *BigStruct) uint64 {a.C01++return a.C01}func Invoke2(a BigStruct) uint64 {a.C01++return a.C01}func (a *BigStruct) Invoke3() uint64 {a.C01++return a.C01}func (a BigStruct) Invoke4() uint64 {a.C01++return a.C01}func main() {var a = new(BigStruct)for i := 0; i < 3; i++ {fmt.Println("指標傳遞:", Invoke1(a))}var b = BigStruct{}for i := 0; i < 3; i++ {fmt.Println("值傳遞:", Invoke2(b))}var c = BigStruct{}for i := 0; i < 3; i++ {fmt.Println("指標傳遞:", c.Invoke3())}var d = BigStruct{}for i := 0; i < 3; i++ {fmt.Println("值傳遞:", d.Invoke4())}}
運行結果:
[ /labs02/ ] # go run labs02.go指標傳遞: 1指標傳遞: 2指標傳遞: 3值傳遞: 1值傳遞: 1值傳遞: 1指標傳遞: 1指標傳遞: 2指標傳遞: 3值傳遞: 1值傳遞: 1值傳遞: 1
參考:https://github.com/realint/labs/blob/master/src/labs02/labs02_test.go