Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah fungsi generik mengendalikan penunjuk dan jenis rujukan dalam Golang?

Bagaimanakah fungsi generik mengendalikan penunjuk dan jenis rujukan dalam Golang?

王林
王林asal
2024-04-16 16:06:02655semak imbas

Apabila fungsi generik mengendalikan jenis penuding dalam Go, ia akan menerima rujukan kepada pembolehubah asal, membenarkan nilai pembolehubah diubah suai. Jenis rujukan disalin apabila diluluskan, menjadikan fungsi tidak dapat mengubah suai nilai pembolehubah asal. Contoh praktikal termasuk menggunakan fungsi generik untuk membandingkan rentetan atau kepingan nombor.

Bagaimanakah fungsi generik mengendalikan penunjuk dan jenis rujukan dalam Golang?

Cara Fungsi Generik Mengendalikan Jenis Penunjuk dan Rujukan dalam Go

Pengenalan

Generik ialah ciri berkuasa yang membolehkan kami mencipta fungsi yang boleh mengendalikan jenis data yang berbeza. Memahami cara fungsi generik mengendalikan jenis penunjuk dan rujukan adalah penting untuk memanfaatkannya sepenuhnya.

Jenis penunjuk

Penunjuk ialah pembolehubah yang menunjuk ke alamat memori pembolehubah lain. Apabila anda menghantar penunjuk sebagai parameter kepada fungsi generik, fungsi menerima rujukan kepada pembolehubah asal. Ini membolehkan fungsi mengubah suai nilai pembolehubah.

import "fmt"

func PrintPointerValue[T any](ptr *T) {
    fmt.Println(*ptr)
}

func main() {
    num := 10
    PrintPointerValue(&num) // 输出 10
}

Jenis rujukan

Jenis rujukan menggunakan penunjuk untuk berkongsi data antara pembolehubah berbeza. Tidak seperti penunjuk, jenis rujukan disalin apabila dihantar ke fungsi generik. Ini menjadikannya mustahil untuk fungsi mengubah suai nilai pembolehubah asal.

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
}

Kes praktikal

Berikut ialah kes penggunaan fungsi generik untuk membandingkan dua rentetan atau hirisan integer:

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
}

Atas ialah kandungan terperinci Bagaimanakah fungsi generik mengendalikan penunjuk dan jenis rujukan dalam Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn