开发者社区 问答 正文

go程序中通过代码无法区分函数与方法有啥不同

package main

import (
	"fmt"
	"math"
)

type Vertex struct {
	X, Y float64
}

func (v Vertex) Abs() float64 {
	return math.Sqrt(v.X*v.X + v.Y*v.Y)
}

func FABS(v Vertex) float64 {
	return math.Sqrt(v.X*v.X + v.Y*v.Y)
}

func main() {
	v := Vertex{3, 4}
	fmt.Println(v.Abs())
	fmt.Println(FABS(v))
}

运行结果

5
5

展开
收起
水果黄瓜 2021-10-24 09:25:36 428 分享 版权
阿里云 AI 助理回答

这段代码是用Go语言编写的,它定义了一个名为Vertex的结构体类型,用于表示二维空间中的一个点,具有X和Y两个坐标值。同时定义了两个计算该点到原点欧几里得距离的方法:一个是作为Vertex类型的实例方法Abs(),另一个是作为普通函数FABS()

  • Abs()方法通过接收者(v Vertex)实现,调用时直接通过结构体实例v.Abs()访问。
  • FABS()函数则直接接收一个Vertex类型的参数v。

两个函数内部实现都是利用勾股定理计算点(v.X, v.Y)到原点(0,0)的距离。

main函数中,创建了一个Vertex类型的变量v,其坐标为(3, 4),然后分别调用了Abs()方法和FABS()函数来计算这个点到原点的距离,并打印结果。由于数学计算正确,两次计算的结果均为5,这符合预期,因为点(3,4)到原点的确切距离是5(根据勾股定理,( \sqrt{3^2 + 4^2} = \sqrt{9 + 16} = \sqrt{25} = 5 ))。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
Go
问答地址: