大家好,新手问个写结构体方法值传递的问题

imzdj · 2015-04-08 02:54:01 · 1827 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2015-04-08 02:54:01 的主题,其中的信息可能已经有所发展或是发生改变。

直接上代码:

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 跪求大神赐教!!


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1827 次点击  ∙  1 赞  
加入收藏 微博
5 回复  |  直到 2015-04-08 07:00:30
imzdj
imzdj · #1 · 10年之前

三个都运行正常且结果正确 但是如果: type Integer int func (a *Integer) Add(b Integer) { a += b } 就报错了,这是为啥??

polaris
polaris · #2 · 10年之前

Go 编译器会自动做这种转换。查看Go语言规范:http://docs.studygolang.com/ref/spec#Struct_types 或 中文版: http://docscn.studygolang.com/ref/spec.old#结构类型

a += b 属于指针和 int 相加,Go 不支持指针运算。

imzdj
imzdj · #3 · 10年之前
polarispolaris #2 回复

Go 编译器会自动做这种转换。查看Go语言规范:http://docs.studygolang.com/ref/spec#Struct_types 或 中文版: http://docscn.studygolang.com/ref/spec.old#结构类型 而 `a += b` 属于指针和 int 相加,Go 不支持指针运算。

好!马上去瞧瞧,谢谢你这么好的资源,太感谢你了!!

polaris
polaris · #4 · 10年之前

不客气。共同学习!

zyx_today
zyx_today · #5 · 10年之前
polarispolaris #4 回复

不客气。共同学习!

我也从c/c++转到go的。

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传