>  기사  >  백엔드 개발  >  Go 포인터 유형 매개변수 전달 메커니즘

Go 포인터 유형 매개변수 전달 메커니즘

PHPz
PHPz원래의
2024-04-13 09:00:03346검색

Go에는 포인터 유형 매개변수를 전달하는 두 가지 방법이 있습니다. 값 전달: 함수는 포인터의 복사본을 얻고 복사본에 대한 변경 사항은 원래 포인터에 영향을 주지 않습니다. 참조로 전달: 함수는 원래 포인터에 대한 참조를 얻고 참조에 대한 변경 사항은 원래 포인터에 영향을 미칩니다.

Go 포인터 유형 매개변수 전달 메커니즘

Go 포인터 유형 매개변수 전달 메커니즘

Go에서는 포인터 유형 매개변수가 값 전달과 참조 전달이라는 두 가지 방법으로 함수에 전달됩니다.

값으로 전달

포인터 값을 함수에 값으로 전달하면 함수는 포인터의 복사본을 가져옵니다. 이 복사본에 대한 변경 사항은 원본 포인터에 영향을 주지 않습니다.

코드 예:

package main

import "fmt"

func changeValue(ptr *int) {
    *ptr = 10
}

func main() {
    ptr := new(int)
    *ptr = 5
    fmt.Println(*ptr) // 输出: 5

    changeValue(ptr)
    fmt.Println(*ptr) // 输出: 5
}

Pass by reference

포인터 주소를 함수에 값으로 전달하면 함수는 원래 포인터에 대한 참조를 얻습니다. 이 참조에 대한 모든 변경 사항은 원래 포인터에 영향을 미칩니다.

코드 예:

package main

import "fmt"

func changePointer(ptr **int) {
    *ptr = new(int)
    **ptr = 10
}

func main() {
    ptr := new(int)
    *ptr = 5
    fmt.Println(*ptr) // 输出: 5

    changePointer(&ptr)
    fmt.Println(*ptr) // 输出: 10
}

실용 사례

다음 실제 사례에서는 값 전달 및 참조 전달을 사용하여 간단한 연결 목록을 구현합니다.

값으로 전달을 사용하여 연결 목록 구현:

type Node struct {
    value int
    next *Node
}

func createList(values []int) *Node {
    head := &Node{value: values[0]}
    current := head

    for _, v := range values[1:] {
        next := &Node{value: v}
        current.next = next
        current = next
    }

    return head
}

func printList(head *Node) {
    for current := head; current != nil; current = current.next {
        fmt.Printf("%d ", current.value)
    }
    fmt.Println()
}

func main() {
    values := []int{1, 2, 3, 4, 5}
    head := createList(values)
    printList(head) // 输出: 1 2 3 4 5
}

참조로 전달을 사용하여 연결 목록 구현:

type Node struct {
    value int
    next **Node
}

func createList(values []int) *Node {
    head := &Node{value: values[0]}
    current := head

    for _, v := range values[1:] {
        next := &Node{value: v}
        *current.next = next
        current = next
    }

    return head
}

func printList(head *Node) {
    for current := head; current != nil; current = *current.next {
        fmt.Printf("%d ", current.value)
    }
    fmt.Println()
}

func main() {
    values := []int{1, 2, 3, 4, 5}
    head := createList(values)
    printList(head) // 输出: 1 2 3 4 5
}

첫 번째 예에서는 값으로 전달을 사용하여 연결 목록을 만듭니다. 두 번째 예에서는 참조별 전달을 사용하여 연결 목록을 만듭니다. 실행 결과는 동일하지만 참조로 전달하는 경우 함수에서 연결 리스트의 순서를 수정할 수 있습니다.

위 내용은 Go 포인터 유형 매개변수 전달 메커니즘의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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