直接上代码:
```go
func (r *Rect) Area1() float64{
return (*r).width * (*r).height
}
func (r *Rect) Area2() float64{
return r.width * r.height
}
func (r Rect) Area3() float64{
return r.width * r.height
}
func main(){
var r = new(Rect)
r.width = 2.5
r.height = 2.5
fmt.Println("r's area1 is :",r.Area1())
fmt.Println("r's area2 is :",r.Area2())
fmt.Println("r's area3 is :",r.Area3())
}
```
以前是搞C/C++的,刚解除golang,遇到这个就很难理解了,尤其是第二个,入参是指针类型,访问内容不需要加星号?? 还有就是如 :` rect2 := &Rect{2.5,2.5} `这种,也是返回的指针,但是访问的时候也是直接rect2.width 跪求大神赐教!!
三个都运行正常且结果正确
但是如果:
type Integer int
func (a *Integer) Add(b Integer) {
a += b
}
就报错了,这是为啥??
#1
更多评论
Go 编译器会自动做这种转换。查看Go语言规范:http://docs.studygolang.com/ref/spec#Struct_types 或 中文版: http://docscn.studygolang.com/ref/spec.old#结构类型
而 `a += b` 属于指针和 int 相加,Go 不支持指针运算。
#2