Maison > Article > développement back-end > Quelle est la différence entre les fonctions ordinaires et les méthodes du langage Go ?
Différence : pour les fonctions ordinaires, lorsque le récepteur est de type valeur, les données de type pointeur ne peuvent pas être transmises directement, et vice versa ; pour les méthodes, lorsque le récepteur est de type valeur, il peut être appelé directement avec un méthode de variable de type pointeur, et l’inverse est également possible.
L'environnement d'exploitation de cet article : système Windows10, Go 1.11.2, ordinateur Thinkpad T480.
Recommandations associées : "Tutoriel vidéo Go"
La différence entre les fonctions et méthodes ordinaires en langage Go
1. Les fonctions ordinaires ne peuvent pas transmettre directement les données de type pointeur lorsque le récepteur est un type valeur, et vice versa.
2. Pour les méthodes (telles que les méthodes struct), lorsque le récepteur est de type valeur, vous pouvez appeler directement la méthode à l'aide d'une variable de type pointeur, et vice versa.
Ce qui suit est un exemple simple :
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() //与普通函数不同,接收者为指针类型和值类型的方法,指针类型和值类型的变量均可相互调用 }
Pour plus de connaissances liées à la programmation, veuillez visiter : Cours de programmation ! !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!