type N int
func (n N) value() {
n++
fmt.Printf("v:%p, %v\n", &n, n)
}
func (n *N) pointer() {
(*n)++
fmt.Printf("p:%p, %v\n", n, *n)
}
func main() {
var a N = 25
a.value()
a.pointer()
fmt.Printf("a:%p, %v\n", &a, a)
}
type N int
func (n N) test() {
fmt.Printf("test.n:%p, %d\n", &n, n)
}
func main() {
var n N = 25
fmt.Printf("main.n:%p, %d\n",&n, n)
f1 := N.test
f1(n)
f2 := (*N).test
f2(&n)
}
type N int
func (n N) test() {
fmt.Printf("test.n:%p, %v\n", &n, n)
}
func call(m func()) {
m()
}
func main() {
var n N = 100
p := &n
fmt.Printf("main.n:%p, %v\n", p, n)
n++
call(n.test)
n++
call(p.test)
}
如果目标方法的receiver是指针类型,那么被复制的仅是指针
type N int
func (n *N) test() {
fmt.Printf("test.n: %p, %v\n", n, *n)
}
func main() {
var n N = 100
p := &n
n++
f1 := n.test
n++
f2 := p.test
n++
fmt.Printf("main.n:%p, %v\n", p, n)
f1() //延迟调用 n==103
f2()
}