Ils sont expliqués en détail ici - https://anil.cloud/2017/01/26/golang-functions-methods-simplified/
Une fonction en Go suit la syntaxe suivante :
func FunctionName(Parameters...) ReturnTypes...
Exemple :
func add(x int, y int) int
Pour exécuter :
add(2,3)
Une méthode est comme une fonction, mais attachée à un type (appelé récepteur). Le guide officiel indique "Une méthode est une fonction avec un argument récepteur spécial". Le récepteur apparaît entre le mot-clé func et le nom de la méthode. La syntaxe d'une méthode est la suivante :
func (t ReceiverType) FunctionName(Parameters...) ReturnTypes...
Exemple :
func (t MyType) add(int x, int y) int
Pour exécuter :
type MyType string
t1 := MyType("sample")
t1.add(1,2)
Introduisons maintenant les pointeurs dans le tableau. Le langage Go est de type pass by value, ce qui signifie que de nouvelles copies des paramètres sont transmises à chaque appel de fonction/méthode. Pour les passer par référence, vous pouvez utiliser des pointeurs.
Syntaxe de la fonction avec un pointeur dans la liste des arguments/paramètres.
func FunctionName(*Pointers...,Parameters...) ReturnTypes...
Exemple
func add(t *MyType, x int, y int) int
Pour exécuter :
type MyType string
t1 := MyType("sample")
add(&t1,4,5)
De même pour les méthodes, le type de récepteur peut être un pointeur. Syntaxe d'une méthode avec un pointeur (comme récepteur)
func (*Pointer) FunctionName(Parameters...) ReturnTypes...
Exemple
func (t *MyType) add(x int, y int) int
Pour exécuter :
type MyType string
t1 := MyType("sample")
t1.add(2,3)
Notez que nous pouvons toujours écrire t1.add() pour exécuter la méthode avec un pointeur récepteur (même si 't1' n'est pas un pointeur) et Go l'interprétera comme (&t1).add(). De même, une méthode avec un récepteur de valeur peut aussi être appelée en utilisant un pointeur, Go interprétera p.add() comme (*p).add() dans ce cas (où 'p' est un pointeur). Ceci n'est applicable qu'aux méthodes et non aux fonctions.
Les méthodes avec un pointeur récepteur sont très utiles pour obtenir un comportement "Java" où la méthode modifie réellement la valeur vers laquelle le récepteur pointe et non une copie de celle-ci.