首頁  >  文章  >  後端開發  >  Go指標類型的參數傳遞機制

Go指標類型的參數傳遞機制

PHPz
PHPz原創
2024-04-13 09:00:03404瀏覽

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
}

引用傳遞

#如果將指標位址作為值傳遞給函數,則函數將獲得對原始指標的引用。對該引用所做的任何更改都會影響原始指標。

程式碼範例:

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