Bagaimanakah fungsi generik mengendalikan penunjuk dan jenis rujukan dalam Golang?

王林
Lepaskan: 2024-04-16 16:06:02
asal
564 orang telah melayarinya

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
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan