美文网首页
09. Go极简教程 结构体的函数扩展

09. Go极简教程 结构体的函数扩展

作者: 超级大柱子 | 来源:发表于2018-06-03 01:25 被阅读26次

    Go 没有类。然而,仍然可以在结构体类型上定义方法。

    结构体的函数扩展可以帮助我们实现类似面向对象的"类的封装"

    给结构体扩展方法

    package main
    
    import (
        "log"
    )
    
    // Vertex -
    type Vertex struct {
        X, Y float64
    }
    
    // Scale - 正确的例子
    func (v *Vertex) Scale(f float64) {
        v.X = v.X * f
        v.Y = v.Y * f
    }
    
    // Small - 错误的例子
    func (v Vertex) Small(f float64) {
        v.X = v.X / f
        v.Y = v.Y / f
    }
    
    func main() {
        // Scale 使用了 *Vertex 指针, 避免在每个方法调用中拷贝值(如果值类型是大的结构体的话会更有效率
        // 其次,方法可以修改接收者指向的值
        v1 := &Vertex{3, 4}
        v1.Scale(5)
        log.Println(*v1) // {15 20}
    
        // Small 方法没有使用指针, 函数里头的v是拷贝值, 每次修改的都是新的拷贝值, 所以v2没有被修改
        v2 := Vertex{3, 4}
        v2.Small(2)
        log.Println(v2) // {3, 4}
    }
    
    

    参考资料:
    http://go-tour-zh.appspot.com/

    Go极简教程 继续阅读( 目录)

    相关文章

      网友评论

          本文标题:09. Go极简教程 结构体的函数扩展

          本文链接:https://www.haomeiwen.com/subject/iymdsftx.html