GoLang NoteBook Methods And InterFace

Method

Golang 中没有类的概念,只有结构体。
定义函数时,如果指定了一个receiver,则这个函数会被绑定到receiver上,这个receiver必须是一个local type,也就是使用type关键字定义的类型。

定义

基本类型方法
type MyInt int

func (v MyInt) Abs() MyInt {
    if v > 0 {
        return v
    } else {
        return -v
    }
}

结构体类型方法

type MyPos struct {
    x float64
    y float64
}

func (myPos MyPos) Abs() float64 {
    return math.Sqrt(myPos.x*myPos.x + myPos.y*myPos.y)
}

什么时候receiver应该是指针,什么时候应该是局部变量?

  1. 当你需要对原始数据做修改时,receiver应该使用指针。
  2. 当一个变量的copy代价非常大的时候,避免每次method call都要复制变量。

eg:平面直角系的坐标点

type Point struct {
    x        float64
    y        float64
    disCache float64
}

func (point Point) Dis() float64 {
    return math.Sqrt(point.x*point.x + point.y*point.y)
}

func (point *Point) DisCache() float64 {
    if point.disCache != 0 {
        fmt.Println("Get From Cache")
        return point.disCache
    }
    point.disCache = point.Dis()
    return point.disCache
}

其中point.disCache = point.Dis()调用的问题可以查看这个问题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,845评论 0 9
  • 本文转载自:http://yulingtianxia.com/blog/2014/11/05/objective-...
    ant_flex阅读 4,172评论 0 1
  • 转载:http://yulingtianxia.com/blog/2014/11/05/objective-c-r...
    F麦子阅读 4,108评论 0 2
  • “沙龙香”号称香水届的黑马骑士,勇敢、高贵,令人着迷。对于我来说,喜欢与不喜欢之间很少有灰色地带,那么也可以很肯定...
    只有VIAN阅读 3,723评论 0 0
  • 在幻变的生命里,岁月原来是最大的小偷。好像什么也没做就过了三十天。真的什么都没做吗?翻看自己在简书里的足迹,却...
    勿言无阅读 1,443评论 0 0