Heim >Backend-Entwicklung >Golang >Was ist der Unterschied zwischen gewöhnlichen Funktionen und Methoden in der Go-Sprache?
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.
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!