Maison  >  Article  >  développement back-end  >  Quelle est la différence entre les fonctions ordinaires et les méthodes du langage Go ?

Quelle est la différence entre les fonctions ordinaires et les méthodes du langage Go ?

青灯夜游
青灯夜游original
2020-12-08 11:23:012253parcourir

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.

Quelle est la différence entre les fonctions ordinaires et les méthodes du langage Go ?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Quelle langue est utilisée ?Article suivant:Quelle langue est utilisée ?