Maison  >  Article  >  développement back-end  >  Méthode d'utilisation de l'assertion de type de méthode de fonction Golang

Méthode d'utilisation de l'assertion de type de méthode de fonction Golang

WBOY
WBOYoriginal
2023-05-16 11:01:44971parcourir

Golang est un langage de programmation efficace et actuellement très populaire en raison de sa simplicité, de son efficacité et de sa fiabilité. Les assertions de types de fonctions et de méthodes dans Golang sont l'un des outils importants couramment utilisés par les programmeurs avancés. À travers cet article, nous approfondirons l'utilisation des assertions de type de méthode pour les fonctions Golang.

  1. Introduction à l'assertion de type de méthode

Dans Golang, l'assertion de type de méthode est la conversion de type entre le pointeur et la valeur. En utilisant la notation par points pour appeler des méthodes, Golang fait quelque chose en coulisse. Lorsque vous appelez une méthode, vous transmettez en fait le récepteur (pour les valeurs et les pointeurs) à la méthode. À l'aide d'assertions de type de méthode, nous pouvons librement convertir entre les valeurs et les pointeurs.

Par exemple :

type MyType struct {
    field int
}

func (mt MyType) sayHi() {
    fmt.Println("Hi from MyType with field:", mt.field)
}

func (mt *MyType) sayBye() {
    fmt.Println("Bye from MyType with field:", mt.field)
}

mt := &MyType{field: 42}
mt.sayHi() // Hi from MyType with field: 42

var i interface{} = mt
i.(MyType).sayHi() // Hi from MyType with field: 42

i.(MyType).sayBye() // 运行时error:invalid type assertion: i.(MyType) (non-interface type *interface {} on left)
  1. Type de pointeur et type de valeur

En Golang, une structure peut être un type de valeur ou un type de pointeur. Une structure de type pointeur peut changer d’état dans une méthode, alors qu’une structure de type valeur ne change pas d’état.

Type de pointeur MyType:

type MyType struct {
    field int
}

func (mt *MyType) sayHi() {
    fmt.Println("Hi from MyType with field:", mt.field)
}

mt := &MyType{field: 42}
mt.sayHi() // Hi from MyType with field: 42

Type de valeur MyType:

type MyType struct {
    field int
}

func (mt MyType) sayHi() {
    fmt.Println("Hi from MyType with field:", mt.field)
}

mt := MyType{field: 42}
mt.sayHi() // Hi from MyType with field: 42
  1. Utilisation de l'assertion de type de méthode

Dans Golang, l'assertion de type de méthode peut nous aider à maîtriser la conversion entre les types de pointeur et les types de valeur. Dans l'exemple suivant, nous montrons comment utiliser les assertions de type de méthode.

type MyType struct {
    field int
}

func (mt MyType) sayHi() {
    fmt.Println("Hi from MyType with field:", mt.field)
}

func (mt *MyType) sayBye() {
    fmt.Println("Bye from MyType with field:", mt.field)
}

func main() {
    mt := &MyType{field: 42}
    mt.sayHi() // Hi from MyType with field: 42

    // 方法类型断言:值类型转换成指针类型
    var imt interface{} = MyType{field: 24}
    p, ok := imt.(*MyType) // ok 变量用于检查类型断言是否成功
    if ok {
        p.sayHi() // Hi from MyType with field: 24
    } else {
        fmt.Println("assertion failed")
    }

    // 方法类型断言:指针类型转换成值类型
    imt = mt
    v, ok := imt.(MyType) // ok 变量用于检查类型断言是否成功
    if ok {
        v.sayHi() // Hi from MyType with field: 42
    } else {
        fmt.Println("assertion failed")
    }
}

L'utilisation d'assertions de type de méthode simplifie le processus de programmation en nous donnant la liberté de convertir entre les valeurs et les pointeurs.

  1. Résumé

Dans Golang, l'assertion de type de méthode est l'un des outils importants couramment utilisés par les programmeurs avancés. Avec les assertions de type de méthode, nous pouvons librement convertir entre les valeurs et les pointeurs, simplifiant ainsi le processus de programmation. Cet article détaille la différence entre les types de pointeur et les types de valeur, ainsi que la manière d'utiliser les assertions de type de méthode. Pour les débutants, les assertions de type de méthode peuvent être un peu compliquées, mais à mesure que vous gagnerez en expérience, la compréhension et la maîtrise des assertions de type de méthode seront très utiles.

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:code caché golangArticle suivant:code caché golang