Unterschied zwischen Funktion und Methode in Golang

In Golang gibt es einige Unterschiede zwischen Funktionen und Methoden.

Eine Funktion ist ein in sich geschlossener Codeblock, der Eingabeparameter entgegennimmt und ein Ergebnis zurückgibt. Es kann von überall aufgerufen werden und ist nicht an eine bestimmte Struktur oder einen bestimmten Typ gebunden.

Methoden sind Funktionen, die einem bestimmten Typ zugeordnet sind. Es ist Teil eines Typs und kann über eine Instanz dieses Typs aufgerufen werden. Methoden können auf Daten dieses Typs zugreifen, diese bearbeiten und sie ändern. Wenn eine Methode definiert ist, muss sie den Empfänger (Empfänger) angeben, dh den Typ, zu dem die Methode gehört. Der Empfänger kann ein Werttyp (z. B. eine Struktur) oder ein Zeigertyp sein.

Im Folgenden sind einige der Unterschiede zwischen Funktionen und Methoden aufgeführt:

  • Syntax: Eine Funktionsdefinition hat keinen Empfänger und eine Methodendefinition muss einen Empfänger angeben. Methodendefinitionen stellen dem Funktionsnamen den Typ des Empfängers voran.
  • Aufrufende Methode: Funktionen können von überall direkt aufgerufen werden, während Methoden nur über Instanzen von Typen aufgerufen werden können.
  • Datenzugriff: Funktionen können nicht direkt auf Daten eines Typs zugreifen, während Methoden auf Daten eines Typs zugreifen und diese bearbeiten können.
  • Daten ändern: Methoden können Daten des Empfängertyps ändern, während Funktionen keine Daten ändern können.

Hier ist ein Beispiel, das zeigt, wie sich Funktionen und Methoden unterscheiden:

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)  
}  

In diesem Beispiel ist Area() eine Methode vom Typ „Rechteck“, die für eine Rect-Instanz aufgerufen werden kann. Sum() ist eine Funktion und kann direkt aufgerufen werden.

Guess you like

Origin blog.csdn.net/wo541075754/article/details/131864351