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

问题描述 投票:0回答:1

我已经阅读了函数和方法之间的区别。我已经对堆栈溢出做了一些先前的回答。但是,我不明白为什么它们要保持完全不同。根据我的理解:使用方法可以完成的任何事情,也可以使用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))
}

其中MF分别代表方法和功能。

我想知道我是否缺少什么;这些不同的实现背后是否有一些真实的理由。例如各有利弊。

function go methods syntax
1个回答
0
投票

Golang Methods中的一些技巧:

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

The thumb of the rule is在以下情况下不定义方法:

  • 不需要依赖状态
  • 您可以在实现特定接口的任何类型上执行此功能,这意味着您不必限制此功能属于特定类型。
© www.soinside.com 2019 - 2024. All rights reserved.