这里有详细解释-https://anil.cloud/2017/01/26/golang-functions-methods-simplified/
Go 中的函数遵循以下语法:
func FunctionName(Parameters...) ReturnTypes...
例子:
func add(x int, y int) int
执行:
add(2,3)
方法类似于函数,但附加到类型(称为接收器)。官方指南指出“方法是具有特殊接收器参数的函数”。接收者出现在 func 关键字和方法名之间。方法的语法是:
func (t ReceiverType) FunctionName(Parameters...) ReturnTypes...
例子:
func (t MyType) add(int x, int y) int
执行:
type MyType string
t1 := MyType("sample")
t1.add(1,2)
现在让我们将指针带入表中。 Go lang 是按值传递的,这意味着将参数的新副本传递给每个函数/方法调用。要通过引用传递它们,您可以使用指针。
参数/参数列表中带有指针的函数的语法。
func FunctionName(*Pointers...,Parameters...) ReturnTypes...
例子
func add(t *MyType, x int, y int) int
执行:
type MyType string
t1 := MyType("sample")
add(&t1,4,5)
对于方法,接收者类型也可以是指针。带指针的方法语法(作为接收者)
func (*Pointer) FunctionName(Parameters...) ReturnTypes...
例子
func (t *MyType) add(x int, y int) int
执行:
type MyType string
t1 := MyType("sample")
t1.add(2,3)
请注意,我们仍然可以编写 t1.add() 来执行带有指针接收器的方法(即使“t1”不是指针),Go 会将其解释为 (&t1).add()。类似地,也可以使用指针调用具有值接收器的方法,在这种情况下,Go 会将 p.add() 解释为 (*p).add()(其中“p”是指针)。这仅适用于方法,不适用于函数。
带有指针接收器的方法对于获得类似“Java”的行为非常有用,其中该方法实际上修改的是接收器指向的值,而不是它的副本。