>  기사  >  백엔드 개발  >  일반 함수는 Golang의 포인터와 참조 유형을 어떻게 처리합니까?

일반 함수는 Golang의 포인터와 참조 유형을 어떻게 처리합니까?

王林
王林원래의
2024-04-16 16:06:02557검색

일반 함수가 Go에서 포인터 유형을 처리할 때 원래 변수에 대한 참조를 수신하여 변수 값을 수정할 수 있습니다. 전달되면 참조 유형이 복사되므로 함수가 원래 변수 값을 수정할 수 없습니다. 실제적인 예로는 일반 함수를 사용하여 문자열이나 숫자 조각을 비교하는 것이 포함됩니다.

일반 함수는 Golang의 포인터와 참조 유형을 어떻게 처리합니까?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.