function - Go中区分函数和方法的具体原因是什么?

标签 function go methods syntax

我已经阅读了函数和方法之间的区别。我已经阅读了一些关于堆栈溢出的先前答案。但是,我不明白为什么它们完全不同。根据我的理解:使用方法可以完成的事情也可以使用 Go 中的函数完成。我知道方法也是函数。为了进一步澄清我的问题,我添加了一个示例:

package main

import (
    "fmt"
)

type Point struct {
    a, b int
}

func (p *Point) sumM() int {
    return p.a + p.b
}
func sumF(p *Point) int {
    return p.a + p.b
}

func (p *Point) mulM(n int) int {
    return (p.a + p.b) * n
}
func mulF(p *Point, n int) int {
    return (p.a + p.b) * n
}

func main() {
    p := Point{2, 3}
    fmt.Println("sumM is: ", p.sumM())
    fmt.Println("sumF is: ", sumF(&p))
    fmt.Println("mulM is: ", p.mulM(2))
    fmt.Println("mulF is: ", mulF(&p, 2))
}

在哪里 手机 分别代表方法和功能。

我想知道我是否遗漏了什么;如果这些不同的实现背后有一些真实的推理。例如每个的优点和缺点。

最佳答案

来自 Golang Methods 的一些提示:

  • 方法只是一个带有接收器参数的函数。
  • 方法可帮助您在 Go 中编写面向对象风格的代码。
  • 方法调用比函数调用更容易阅读和理解。
  • 方法可帮助您避免命名冲突。由于方法与特定的接收器相关联,因此您可以在不同的接收器类型上使用相同的方法名称。

  • The thumb of the rule is在以下情况下不定义方法:
  • 不需要依赖状态
  • 您可以在实现特定接口(interface)的任何类型上执行此功能,这意味着您无需将此功能限制为属于特定类型。
  • 关于function - Go中区分函数和方法的具体原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61049079/

    相关文章:

    c - 在 C 语言中,给返回指针的函数赋值有什么作用? *功能=值

    C:在 main 期间使用在函数中创建的二维数组

    go - 使用 goroutine 处理退避

    go - 在 go 中删除跟踪中的模块路径

    java - 我是否从我的方法中返回了正确的值以及我是否正确地编写了它?

    java - 在Java中查找既是三角形数又是星形数的数字

    c - 当我返回一个多维数组时,如何将我的函数中的内容传回我的结构

    function - 向两个用户发送确认电子邮件

    go - 如何在函数中多次添加一些行?

    java - 当用户将命令行参数留空时如何正确显示错误?