看下面向过程的代码:
package main
import "fmt"
type Integer int
func adder(x, y Integer) Integer {
return x + y
}
func main() {
var x Integer = 1
var y Integer = 2
fmt.Println(adder(x, y))
}
结果:3
面向对象要怎么写?
package main
import "fmt"
type Integer int
func (i Integer) adder(x Integer) {
i += x
}
func main() {
var x Integer = 1
var y Integer = 2
x.adder(y)
fmt.Println(x)
}
结果:1
居然不是3, 问题在哪里呢? 看代码:
package main
import "fmt"
type Integer int
func (i *Integer) adder(x Integer) {
*i += x
}
func main() {
var x Integer = 1
var y Integer = 2
x.adder(y)
fmt.Println(x)
}
结果:3
注意,在调用x.add(y)时,实际上是把x的地址传给给adder函数的i指针。