struct的方法指针和非指针有什么区别吗?

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

type Rectangle struct {
    length, width int
}

func (r Rectangle) Area_by_value() int {
    return r.length * r.width
}

func (r *Rectangle) Area_by_reference() int {
    return r.length * r.width
}

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

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

5114 次点击  
加入收藏 微博
6 回复  |  直到 2014-01-13 09:27:34
jimmykuu
jimmykuu · #1 · 11年之前

对结果来说没有区别,值传递需要拷贝一下,指针传递快一点。

如果你要修改struct的话,那需要用指针。

func (r *Rectangle) SetLenght (length int) {
    r.length = length
}
jimmykuu
jimmykuu · #2 · 11年之前
func (r *Rectangle) SetLenght (length int) {
    r.length = length
}
otinn
otinn · #3 · 11年之前
jimmykuujimmykuu #2 回复

func (r *Rectangle) SetLenght (length int) { r.length = length }

我按照你的gopher 的模板函数

var funcMaps = template.FuncMap{
    "len": func(s string) string {
        fmt.Println(s)
        return "1111"
    },
    "assert": func(s string) string {
        fmt.Println(s)
        return "1111"
    },
}

len可以调用,但是assert就报

Handler crashed with error template: topic.html:2: function "assert" not defined
jimmykuu
jimmykuu · #4 · 11年之前
otinnotinn #3 回复

#2楼 @jimmykuu 我按照你的gopher 的模板函数 var funcMaps = template.FuncMap{ "len": func(s string) string { fmt.Println(s) return "1111" }, "assert": func(s string) string { fmt.Println(s) return "1111" }, } len可以调用,但是assert就报 Handler crashed with error template: topic.html:2: function "assert" not defined

我的template没有设置name,用FuncMap的方式不起作用,len可以用是因为len是template中内置的。

otinn
otinn · #5 · 11年之前
jimmykuujimmykuu #4 回复

#3楼 @otinn 我的template没有设置name,用`FuncMap`的方式不起作用,`len`可以用是因为`len`是template中内置的。

{{ len "sdd" }} 返回的是1111会把sdd打印出来

jimmykuu
jimmykuu · #6 · 11年之前
otinnotinn #5 回复

#4楼 @jimmykuu {{ len "sdd" }} 返回的是1111会把sdd打印出来

哦,你代码如何写的?我试了下assert也可以的。

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