Home >Backend Development >Golang >How do generic functions handle pointers and reference types in Golang?
When a generic function handles pointer types in Go, it will receive a reference to the original variable, allowing the variable value to be modified. Reference types are copied when passed, making the function unable to modify the original variable value. Practical examples include using generic functions to compare strings or slices of numbers.
How generic functions handle pointers and reference types in Go
Introduction
Generics are a powerful feature that allows us to create functions that can handle different data types. Understanding how generic functions handle pointer and reference types is critical to getting the most out of them.
Pointer type
A pointer is a variable that points to the memory address of another variable. When you pass a pointer as a parameter to a generic function, the function receives a reference to the original variable. This allows the function to modify the value of the variable.
import "fmt" func PrintPointerValue[T any](ptr *T) { fmt.Println(*ptr) } func main() { num := 10 PrintPointerValue(&num) // 输出 10 }
Reference types
Reference types use pointers to share data between different variables. Unlike pointers, reference types are copied when passed to generic functions. This makes it impossible for the function to modify the value of the original variable.
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 }
Practical case
The following is a case of using a generic function to compare two strings or integer slices:
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 }
The above is the detailed content of How do generic functions handle pointers and reference types in Golang?. For more information, please follow other related articles on the PHP Chinese website!