Lorsqu'une fonction générique gère les types de pointeurs dans Go, elle recevra une référence à la variable d'origine, permettant de modifier la valeur de la variable. Les types de référence sont copiés lorsqu'ils sont transmis, ce qui rend la fonction incapable de modifier la valeur de la variable d'origine. Des exemples pratiques incluent l'utilisation de fonctions génériques pour comparer des chaînes ou des tranches de nombres.
Comment les fonctions génériques gèrent les types de pointeur et de référence dans Go
Introduction
Les génériques sont une fonctionnalité puissante qui nous permet de créer des fonctions capables de gérer différents types de données. Comprendre comment les fonctions génériques gèrent les types pointeur et référence est essentiel pour en tirer le meilleur parti.
Type de pointeur
Un pointeur est une variable qui pointe vers l'adresse mémoire d'une autre variable. Lorsque vous passez un pointeur en paramètre vers une fonction générique, la fonction reçoit une référence à la variable d'origine. Cela permet à la fonction de modifier la valeur de la variable.
import "fmt" func PrintPointerValue[T any](ptr *T) { fmt.Println(*ptr) } func main() { num := 10 PrintPointerValue(&num) // 输出 10 }
Types de référence
Les types de référence utilisent des pointeurs pour partager des données entre différentes variables. Contrairement aux pointeurs, les types référence sont copiés lorsqu’ils sont transmis aux fonctions génériques. Cela empêche la fonction de modifier la valeur de la variable d'origine.
import "fmt" type Person struct { Name string } func PrintPersonName[T any](r T) { if p, ok := r.(Person); ok { // 类型断言 fmt.Println(p.Name) } } func main() { p := Person{Name: "John"} PrintPersonName(p) // 输出 John }
Cas pratique
Ce qui suit est un cas d'utilisation d'une fonction générique pour comparer deux chaînes ou tranches entières :
import "fmt" func Equal[T comparable](a, b []T) bool { if len(a) != len(b) { return false } for i, v := range a { if v != b[i] { return false } } return true } func main() { str1 := []string{"a", "b", "c"} str2 := []string{"a", "b", "c"} fmt.Println(Equal(str1, str2)) // 输出 true num1 := []int{1, 2, 3} num2 := []int{1, 2, 3} fmt.Println(Equal(num1, num2)) // 输出 true }
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!