Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Melaksanakan Pengendalian Ralat Generik dalam Go Without Generics?

Bagaimana untuk Melaksanakan Pengendalian Ralat Generik dalam Go Without Generics?

Susan Sarandon
Susan Sarandonasal
2024-11-04 12:48:01361semak imbas

How to Implement Generic Error Handling in Go Without Generics?

Melaksanakan Pengendalian Ralat Generik dalam Go

Ketiadaan keupayaan generik Go menimbulkan cabaran apabila cuba menyamaratakan fungsi. Senario biasa ialah keperluan untuk fungsi pengendalian ralat generik yang digunakan untuk mana-mana fungsi yang mengembalikan nilai dan ralat.

Contoh yang disediakan menunjukkan percubaan untuk mencipta fungsi sedemikian menggunakan antara muka kosong:

<code class="go">func P(any interface{}, err error) (interface{}) {
    if err != nil {
        panic("error: "+ err.Error())
    }
    return any
}</code>

Sementara pendekatan ini berfungsi untuk pengendalian ralat, ia kehilangan maklumat jenis, meninggalkan antara muka yang terhasil kosong.

Menjana Fungsi Pengendalian Ralat Khusus Jenis

Untuk mengelakkan isu kehilangan maklumat jenis, pertimbangkan untuk menggunakan penjanaan kod untuk mencipta pelaksanaan khusus fungsi pengendalian ralat untuk jenis yang berbeza. Ini boleh dicapai menggunakan alatan seperti "go generate", "gengen", "genny" atau "gen".

Sebagai contoh, menggunakan "gen", anda boleh menentukan templat:

<code class="text">// template.go

package main

import "fmt"

func P[T any](v T, err error) (T) {
    if err != nil {
        panic(fmt.Sprintf("error: %v", err))
    }
    return v
}</code>

Templat ini boleh digunakan untuk menjana pelaksanaan jenis khusus bagi P():

<code class="sh">gen generate</code>

Ini akan mewujudkan pelaksanaan seperti sebagai:

<code class="go">// p_int.go

package main

func PInt(v int, err error) (int) {
    if err != nil {
        panic(fmt.Sprintf("error: %v", err))
    }
    return v
}</code>

Dengan menggunakan fungsi yang dijana ini, maklumat jenis dikekalkan dan pengendalian ralat boleh digunakan pada jenis tertentu dengan lancar.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pengendalian Ralat Generik dalam Go Without Generics?. 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