美文网首页
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极简教程 结构体的函数扩展

    Go 没有类。然而,仍然可以在结构体类型上定义方法。 结构体的函数扩展可以帮助我们实现类似面向对象的"类的封装" ...

  • 01 Go极简教程 目录

    极简教程的初衷是给已有其他语言基础的人阅读尽可能少的内容学习Go语言 Go极简教程 目录 Go极简教程 环境安装及...

  • 第04天(面对对象编程)_02

    05_结构体指针类型匿名字段.go 06_面向过程和对象函数的区别.go 07_为结构体类型添加方法.go 08_...

  • 15分钟快速回顾Swift3.0

    结构体 结构体有成员变量,构造方法,自定义方法,可以扩展系统的结构体 类和属性 构造函数 和 析构函数 字典模型转...

  • C中将结构体写入文件及读取

    需要导入的头文件 写入结构体 假设有结构体: 结构体写入文件的方法: 读取文件中的结构体 知识扩展 函数fopen...

  • 07. Go极简教程 map的基础使用

    map的声明 map的操作 参考资料:http://go-tour-zh.appspot.com/ Go极简教程 ...

  • Swift学习_扩展和协议

    1.扩展 扩展用于为已存在的类、结构体或枚举等类型添加新的功能 1.扩展计算型属性 2.扩展构造函数 扩展构造函数...

  • 《Groovy极简教程》第11章 Groovy函数式编程(FP)

    《Groovy极简教程》第11章 Groovy函数式编程(FP)

  • go 的选项模式

    现在有个结构体如下定义: 我们需要初始化结构体,如果是其他语言,函数支持默认参数: 但是,go语言函数不支持默认参...

  • 结构体

    结构体初识 结构体指针 结构体的匿名字段 结构体嵌套 Go语言中的OOP

网友评论

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

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