Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist der Unterschied zwischen Funktionen und Methoden in der Go-Sprache?

Was ist der Unterschied zwischen Funktionen und Methoden in der Go-Sprache?

王林
王林Original
2021-02-07 11:56:355387Durchsuche

Der Unterschied zwischen Funktionen und Methoden in der Go-Sprache: Bei gewöhnlichen Funktionen können Zeigertypdaten nicht direkt übergeben werden, wenn der Empfänger ein Werttyp ist. Bei Methoden kann die Methode direkt aufgerufen werden, wenn der Empfänger ein Werttyp ist mit einer Zeigertypvariablen.

Was ist der Unterschied zwischen Funktionen und Methoden in der Go-Sprache?

Die Betriebsumgebung dieses Artikels: Windows 10-System, Go 1.11.2, Thinkpad T480-Computer.

Offizielle Erklärung des Unterschieds zwischen Funktionen und Methoden: Eine Methode ist eine Funktion, die einen Empfänger enthält. Der Empfänger kann ein Wert eines benannten oder Strukturtyps oder ein Zeiger sein. Alle Methoden eines bestimmten Typs gehören zum Methodensatz dieses Typs.

Unterschiede:

1. Für gewöhnliche Funktionen: Wenn der Empfänger (Funktionsparameter) ein Werttyp ist, können Zeigertypdaten nicht direkt übergeben werden und umgekehrt.

func function_name([parameter list]) [return_types] {
   函数体
}

2. Für Methoden (z. B. Strukturmethoden): Wenn der Empfänger ein Werttyp ist, können Sie die Methode direkt mit einer Zeigertypvariablen aufrufen und umgekehrt.

func (variable_name variable_data_type) function_name() [return_type]{
   /* 函数体*/
   }

Sie können den Unterschied zwischen Methoden und Funktionen erkennen. Die Methode befindet sich im Schlüsselwort func. Der letzte ist der Empfänger anstelle des Funktionsnamens. Der Empfänger kann ein von uns definierter Typ sein. Dieser Typ kann eine Struktur oder eine Schnittstelle sein, oder wir können sogar grundlegende Datentypen neu definieren.

Go-Funktionen

Funktionen sind grundlegende Codeblöcke, die eine Aufgabe ausführen.

Go-Sprache hat zumindest eine main()-Funktion.

Sie können verschiedene Funktionen durch Funktionen unterteilen. Logischerweise führt jede Funktion eine bestimmte Aufgabe aus.

Die Funktionsdeklaration teilt dem Compiler den Namen, den Rückgabetyp und die Parameter der Funktion mit.

Go-Funktionen können mehrere Werte zurückgeben.

Die Go-Sprachstandardbibliothek bietet eine Vielzahl integrierter Funktionen, die verwendet werden können. Beispielsweise kann die Funktion len() Argumente verschiedener Typen akzeptieren und die Länge dieses Typs zurückgeben. Wenn wir einen String übergeben, wird die Länge des Strings zurückgegeben. Wenn wir ein Array übergeben, wird die Anzahl der im Array enthaltenen Elemente zurückgegeben.

1. Wertübertragung: Unter Wertübertragung versteht man das Kopieren einer Kopie der tatsächlichen Parameter in die Funktion beim Aufrufen der Funktion, sodass die tatsächlichen Parameter nicht beeinträchtigt werden, wenn die Parameter in der Funktion geändert werden.

2. Übergabe per Referenz: Übergabe per Referenz bedeutet, dass beim Aufrufen der Funktion die Adresse der tatsächlichen Parameter übergeben wird. Dann wirkt sich die Änderung der Parameter in der Funktion auf die tatsächlichen Parameter aus.

Go-Methoden

In der Go-Sprache gibt es sowohl Funktionen als auch Methoden. Eine Methode ist eine Funktion, die einen Empfänger enthält, der ein Wert eines benannten oder Strukturtyps oder ein Zeiger sein kann. Alle Methoden eines bestimmten Typs gehören zum Methodensatz dieses Typs.

Im Folgenden werden ein Strukturtyp und eine Methode dieses Typs definiert:

package mainimport (   "fmt"  )/* 定义结构体 */type Circle struct {
  radius float64
}func main() {  var c1 Circle
  c1.radius = 10.00
  fmt.Println("Area of Circle(c1) = ", c1.getArea())
}//该 method 属于 Circle 类型对象中的方法func (c Circle) getArea() float64 {  //c.radius 即为 Circle 类型对象中的属性
  return 3.14 * c.radius * c.radius
}

(Lernvideofreigabe: Einführung in die Programmierung)

Das obige Codeausführungsergebnis ist:

Area of Circle(c1) =  314

Beispiel

 package structTest  
      
    //普通函数与方法的区别(在接收者分别为值类型和指针类型的时候)  
    //Date:2014-4-3 10:00:07  
      
    import (  
        "fmt"  
    )  
      
    func StructTest06Base() {  
        structTest0601()  
        structTest0602()  
    }  
      
    //1.普通函数  
    //接收值类型参数的函数  
    func valueIntTest(a int) int {  
        return a + 10  
    }  
      
    //接收指针类型参数的函数  
    func pointerIntTest(a *int) int {  
        return *a + 10  
    }  
      
    func structTest0601() {  
        a := 2  
        fmt.Println("valueIntTest:", valueIntTest(a))  
        //函数的参数为值类型,则不能直接将指针作为参数传递  
        //fmt.Println("valueIntTest:", valueIntTest(&a))  
        //compile error: cannot use &a (type *int) as type int in function argument  
      
        b := 5  
        fmt.Println("pointerIntTest:", pointerIntTest(&b))  
        //同样,当函数的参数为指针类型时,也不能直接将值类型作为参数传递  
        //fmt.Println("pointerIntTest:", pointerIntTest(b))  
        //compile error:cannot use b (type int) as type *int in function argument  
    }  
      
    //2.方法  
    type PersonD struct {  
        id   int  
        name string  
    }  
      
    //接收者为值类型  
    func (p PersonD) valueShowName() {  
        fmt.Println(p.name)  
    }  
      
    //接收者为指针类型  
    func (p *PersonD) pointShowName() {  
        fmt.Println(p.name)  
    }  
      
    func structTest0602() {  
        //值类型调用方法  
        personValue := PersonD{101, "Will Smith"}  
        personValue.valueShowName()  
        personValue.pointShowName()  
      
        //指针类型调用方法  
        personPointer := &PersonD{102, "Paul Tony"}  
        personPointer.valueShowName()  
        personPointer.pointShowName()  
      
        //与普通函数不同,接收者为指针类型和值类型的方法,指针类型和值类型的变量均可相互调用  
    }

Verwandte Empfehlungen: Golang-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Funktionen und Methoden in der Go-Sprache?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn