[go] 一瞬でtype T に対するfunc(t T) とfunc(t *T)の違いを理解する #golang

自分が一瞬 うん?となることがあるのでメモ
一瞬は言い過ぎか。

■ code

package main

import (
 "fmt"
)

type T struct{ a, b int }

func (t T) addRef() {
 t.a++
 t.b++
 fmt.Printf("t.a + t.b=%v\n", t.a+t.b)
 return
}

func (t *T) add() {
 t.a++
 t.b++
 fmt.Printf("*t.a+*t.b=%v\n", t.a+t.b)
 return
}

func main() {
 var t *T = new(T)
 var t2 *T = new(T)
 t.a = 1
 t2.a = 1
 t.b = 2
 t2.b = 2

 t.add()
 fmt.Printf(" *T  result=%v\n", t)

 t2.addRef()
 fmt.Printf("  T  result=%v\n", t2)
}

■ result

go run main.go
*t.a+*t.b=5
*T result=&{2 3}
t.a + t.b=5
T result=&{1 2}

参照か、実体か。一度理解すれば問題無いんですけどね。

このブログの人気の投稿

GoとDockerのお勉強 #golang #docker

[Unity]「落ちたら消えるオブジェクト」の作り方

ISUCONにてGoの正規表現で爆死 #ISUCON #golang