일반 함수가 Go에서 포인터 유형을 처리할 때 원래 변수에 대한 참조를 수신하여 변수 값을 수정할 수 있습니다. 전달되면 참조 유형이 복사되므로 함수가 원래 변수 값을 수정할 수 없습니다. 실제적인 예로는 일반 함수를 사용하여 문자열이나 숫자 조각을 비교하는 것이 포함됩니다.
Go에서 일반 함수가 포인터 및 참조 유형을 처리하는 방법
소개
Generics는 다양한 데이터 유형을 처리할 수 있는 함수를 만들 수 있는 강력한 기능입니다. 일반 함수가 포인터 및 참조 유형을 처리하는 방법을 이해하는 것은 이를 최대한 활용하는 데 중요합니다.
포인터 유형
포인터는 다른 변수의 메모리 주소를 가리키는 변수입니다. 일반 함수에 포인터를 매개변수로 전달하면 함수는 원래 변수에 대한 참조를 받습니다. 이를 통해 함수가 변수 값을 수정할 수 있습니다.
import "fmt" func PrintPointerValue[T any](ptr *T) { fmt.Println(*ptr) } func main() { num := 10 PrintPointerValue(&num) // 输出 10 }
참조 유형
참조 유형은 포인터를 사용하여 다양한 변수 간에 데이터를 공유합니다. 포인터와 달리 참조 유형은 일반 함수에 전달될 때 복사됩니다. 이로 인해 함수가 원래 변수의 값을 수정할 수 없습니다.
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 }
실용 사례
다음은 제네릭 함수를 사용하여 두 문자열 또는 정수 슬라이스를 비교하는 사례입니다.
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 }
위 내용은 일반 함수는 Golang의 포인터와 참조 유형을 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!