方法可以与命名类型或命名类型的指针关联。

刚刚看到的两个 Abs 方法。一个是在 *Vertex 指针类型上,而另一个在 MyFloat 值类型上。 有两个原因需要使用指针接收者。首先避免在每个方法调用中拷贝值(如果值类型是大的结构体的话会更有效率)。其次,方法可以修改接收者指向的值。

尝试修改 Abs 的定义,同时 Scale 方法使用 Vertex 代替 *Vertex 作为接收者。

当 v 是 Vertex 的时候 Scale 方法没有任何作用。`Scale` 修改 `v`。当 v 是一个值(非指针),方法看到的是 Vertex 的副本,并且无法修改原始值。

Abs 的工作方式是一样的。只不过,仅仅读取 `v`。所以读取的是原始值(通过指针)还是那个值的副本并没有关系。

package main
import (
    "fmt"
    "math"
)
type Vertex struct {
    X, Y float64
}
func (v *Vertex) Scale(f float64) {
    v.X = v.X * f
    v.Y = v.Y * f
}
func (v *Vertex) Abs() float64 {
    return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
func main() {
    v := &Vertex{3, 4}
    v.Scale(5)
    fmt.Println(v, v.Abs())
}

最新文章

  1. SuperMap-iServer-单点登录功能验证(CAS)
  2. 理解HTML语义化
  3. ORA-01033: ORACLE 正在初始化或关闭 进程 ID: 0 会话 ID: 0 序列号: 0
  4. 使用elk+redis搭建nginx日志分析平台
  5. ACM/ICPC 之 最短路径-dijkstra范例(ZOJ2750-POJ1135(ZOJ1298))
  6. MVC中Html.Listbox的用法实例
  7. 济南学习 Day 2 T2 pm
  8. IOS离线教程下载与Dash的使用
  9. java Html2Image 实现html转图片功能
  10. Table XXX is marked as crashed and should be repaired问题
  11. 【CSS3】使用CSS3线性渐变实现图片闪光划过效果(转)
  12. SQL语句整理1
  13. MySQL--REPEATABLE-READ隔离级别下读取到的“重复数据”
  14. 从Socket入门到BIO,NIO,multiplexing,AIO
  15. IAB303 Data Analytics Assessment Task
  16. [转]ORACLE 11G 导出报错(EXP-00003)未找到段 (0,0) 的存储定义
  17. C机器级移位,编码表示 无符号编码表示,有符号编码表示一般最常见的方式是补码
  18. 使用Docker快速创建.Net Core2.0 Nginx负载均衡节点
  19. C# ConcurrentStack实现
  20. String args[] 和 String[] args 有什么区别

热门文章

  1. Linux下SSH命令使用方法详解(摘自网络)
  2. 深入理解JVM虚拟机4:Java class介绍与解析实践
  3. Synchronized 有几种用法
  4. sklearn.GridSearchCV选择超参
  5. mysql 设置/查看mysql连接数
  6. 神经网络模型(Backbone)
  7. RDD java API使用
  8. 【SpringBoot/MVC】从Oracle下载百万条记录的CSV
  9. python代码-leetcode1 两数相加
  10. 【原创】主机不能访问虚拟机CentOS7中的站点