Dans Golang, il existe quelques différences entre les fonctions et les méthodes.
Une fonction est un bloc de code autonome qui prend des paramètres d'entrée et renvoie un résultat. Il peut être appelé de n’importe où et n’est lié à aucune structure ou type particulier.
Les méthodes sont des fonctions associées à un type particulier. Il fait partie d'un type et peut être appelé via une instance de ce type. Les méthodes peuvent accéder et manipuler des données de ce type, et les modifier. Lorsqu'une méthode est définie, elle doit spécifier le récepteur (récepteur), c'est-à-dire le type auquel appartient la méthode. Le récepteur peut être un type valeur (comme une structure) ou un type pointeur.
Voici quelques-unes des différences entre les fonctions et les méthodes -
- Syntaxe : une définition de fonction n'a pas de récepteur et une définition de méthode doit spécifier un récepteur. Les définitions de méthodes préfixent le nom de la fonction avec le type du récepteur.
- Méthode d’appel : les fonctions peuvent être appelées directement de n’importe où, tandis que les méthodes ne peuvent être appelées que via des instances de types.
- Accès aux données : les fonctions ne peuvent pas accéder directement aux données d'un type, tandis que les méthodes peuvent accéder et manipuler les données d'un type.
- Modification des données : les méthodes peuvent modifier les données du type de récepteur, tandis que les fonctions ne peuvent modifier aucune donnée.
Voici un exemple montrant en quoi les fonctions et les méthodes diffèrent :
package main
import "fmt"
type Rectangle struct {
width float64
height float64
}
// 方法:计算矩形的面积
func (r Rectangle) Area() float64 {
return r.width * r.height
}
// 函数:计算两个数的和
func Sum(a, b int) int {
return a + b
}
func main() {
// 调用方法
rect := Rectangle{
width: 10, height: 5}
fmt.Println("矩形的面积:", rect.Area())
// 调用函数
sum := Sum(3, 5)
fmt.Println("两个数的和:", sum)
}
Dans cet exemple, Area() est une méthode de type Rectangle qui peut être appelée sur une instance rect. Sum() est une fonction et peut être appelée directement.