在Java等语言中,方法及函数几乎没有区别,但是在Golang中两者是完全不同的。官方给出解释中,方法是包含了接收者的函数。

函数的格式是固定的,由func 函数名 参数 返回值(可选) 函数体组成。例如:

func main(a,b int) (int) {
}

而方法会在func关键字后是接收者而不是函数名,接收者可以是自己定义的一个类型,这个类型可以说struct ,interface,甚至我们可以重定义基本数据类型。不过需要注意的是接收者是指针和非指针的区别,我们可以看到当接收者为指针时,可以通过方法改变该接收者的属性,但是非指针类型做不到。
方法示例如下:

func (list *List) Add(values ...interface{}) {
	list.growBy(len(values))
	for _, value := range values {
		list.elements[list.size] = value
		list.size++
	}
}

此外在Golang中有两个特殊的函数,main函数和init函数。main函数作为一个程序的入口,只能有一个。init函数在每个package中是可选的,可有可无,甚至可以有多个。init函数在你导入该package时程序会自动调用,且它只会被调用一次,因为当一个package被多次引用时,它只会被导入一次。