Heim >Backend-Entwicklung >Golang >Was ist der Unterschied zwischen gewöhnlichen Funktionen und Methoden in der Go-Sprache?

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

青灯夜游
青灯夜游Original
2020-12-08 11:23:012320Durchsuche

Unterschied: Bei gewöhnlichen Funktionen können Zeigertypdaten nicht direkt übergeben werden, wenn der Empfänger ein Werttyp ist, und umgekehrt, wenn der Empfänger ein Werttyp ist, kann die Methode direkt mit einer Zeigertypvariablen aufgerufen werden und umgekehrt. Dasselbe ist möglich.

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

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

Verwandte Empfehlungen: „Go-Video-Tutorial

Der Unterschied zwischen gewöhnlichen Funktionen und Methoden in der Go-Sprache

1 Bei gewöhnlichen Funktionen können Zeigertypdaten nicht direkt übergeben werden, wenn der Empfänger ein Werttyp ist. und umgekehrt.

2. Bei Methoden (z. B. Strukturmethoden) können Sie die Methode direkt mithilfe einer Zeigertypvariablen aufrufen, wenn der Empfänger ein Werttyp ist, und umgekehrt.

Das Folgende ist ein einfaches 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()  
  
    //与普通函数不同,接收者为指针类型和值类型的方法,指针类型和值类型的变量均可相互调用  
}

Weitere Programmierkenntnisse finden Sie unter: Programmierkurse! !

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen gewöhnlichen 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
Vorheriger Artikel:Welche Sprache ist go?Nächster Artikel:Welche Sprache ist go?