Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Generik dalam Go 1.18 Boleh Menyelesaikan Masalah Mencipta Nilai Ditaip Tanpa Menyebabkan Ranap Program?

Bagaimanakah Generik dalam Go 1.18 Boleh Menyelesaikan Masalah Mencipta Nilai Ditaip Tanpa Menyebabkan Ranap Program?

Barbara Streisand
Barbara Streisandasal
2024-12-06 01:29:09830semak imbas

How Can Generics in Go 1.18 Solve the Problem of Creating Typed Values Without Causing Program Crashes?

Cara Menggunakan Generik dalam Go 1.18 untuk Mencipta Nilai Ditaip

Dalam pengaturcaraan Go, generik membolehkan penciptaan kod yang beroperasi pada pelbagai jenis tanpa memerlukan pemutus eksplisit atau penegasan jenis. Artikel ini meneroka cara menggunakan generik dalam Go 1.18 untuk mencipta objek baharu dengan nilai yang ditaip.

Latar Belakang: Contoh Kilang Buah

Pertimbangkan contoh ringkas "Kilang Buah" berikut yang cuba mencipta contoh baru buah-buahan secara umum:

type FruitFactory[T any] struct{}

func (f FruitFactory[T]) Create() *T {
    // How do we create a non-nil fruit here?
    // Returning nil crashes the example.
    return nil
}

type Apple struct {
    color string
}

Dalam contoh ini, tugasnya adalah untuk melengkapkan fungsi Cipta untuk mencipta contoh baharu jenis T (iaitu, *Apple dalam kes jenis Apple). Walau bagaimanapun, hanya mengembalikan sifar tidak mencukupi dan menyebabkan program ranap apabila mengakses sifat objek.

Penyelesaian: Mencipta Objek Ditaip

Terdapat dua cara utama untuk mencipta tika baharu nilai yang ditaip menggunakan generik dalam Go 1.18:

  1. Tugasan Deklaratif: Isytihar pembolehubah yang ditaip dan kembalikan alamatnya:
func (f FruitFactory[T]) Create() *T {
    var a T
    return &a
}
  1. Inisialisasi dengan baharu Kata kunci: Gunakan baharu untuk memperuntukkan dan memulakan objek:
func (f FruitFactory[T]) Create() *T {
    return new(T)
}

Penyelesaian ini membenarkan fungsi mencipta nilai bukan penuding (a atau baru(T)) dan, jika perlu, tukarkannya kepada jenis penuding dengan mengembalikan alamatnya ( &a).

Contoh Pelaksanaan

Dalam "Kilang Buah-buahan" contoh:

func (f FruitFactory[T]) Create() *T {
    var a T
    return &a
}

func example() {
    appleFactory := FruitFactory[Apple]{}
    apple := appleFactory.Create()
    apple.color = "red" // No panic now
}

Pengubahsuaian ini membolehkan penciptaan objek Apple baharu dan menetapkan sifatnya tanpa menghadapi kesalahan pembahagian.

Kesimpulan

Dengan generik dalam Go 1.18, pengaturcaraan dengan nilai ditaip sangat dipermudahkan. Dengan memanfaatkan penugasan deklaratif atau kata kunci baharu, adalah mungkin untuk mencipta contoh baharu dalam sebarang jenis dengan lancar, menghapuskan keperluan untuk penghantaran manual dan penegasan jenis yang terdedah kepada ralat.

Atas ialah kandungan terperinci Bagaimanakah Generik dalam Go 1.18 Boleh Menyelesaikan Masalah Mencipta Nilai Ditaip Tanpa Menyebabkan Ranap Program?. 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