Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengembalikan Nilai Lalai untuk Jenis Generik dalam Go?

Bagaimana untuk Mengembalikan Nilai Lalai untuk Jenis Generik dalam Go?

Linda Hamilton
Lepaskan: 2024-12-19 02:24:09
asal
966 orang telah melayarinya

How to Return Default Values for Generic Types in Go?

Mengembalikan Nilai Lalai untuk Jenis Generik dalam Go

Dalam Go, bagaimana anda boleh mengembalikan nilai lalai untuk jenis T generik? Pertimbangkan kod berikut:

type mylist[T any] struct {
    first *node[T]
}

type node[T any] struct {
    data T
    next *node[T]
}

func (list *mylist[T]) pop() T {
    if list.first != nil {
        data := list.first.data
        list.first = list.first.next
        return data
    }
    return nil
}

func (list *mylist[T]) getfirst() T {
    if list.first != nil {
        return list.first.data
    }
    return nil
}
Salin selepas log masuk

Apabila cuba menyusun kod ini, anda mungkin menghadapi ralat:

cannot use nil as T value in return statement
Salin selepas log masuk

Isu Pengembalian Nil

Memulangkan sifar untuk jenis generik tidak dibenarkan dalam Go. Ini kerana nil bukan nilai yang sah untuk semua jenis. Sebagai contoh, jika T ialah integer, mengembalikan sifar tidak bermakna. Begitu juga, nil bukan nilai yang sah untuk struct.

Mengembalikan Nilai Sifar

Daripada mengembalikan sifar, anda harus mengembalikan nilai sifar untuk hujah jenis yang digunakan untuk T. Nilai sifar ialah sifar untuk penunjuk dan hirisan, rentetan kosong untuk rentetan dan 0 untuk integer dan titik terapung nombor.

Untuk mengembalikan nilai sifar, anda boleh mengisytiharkan pembolehubah jenis T dan mengembalikannya:

func getZero[T any]() T {
    var result T
    return result
}
Salin selepas log masuk

Menguji Fungsi Nilai Sifar

Berikut ialah contoh cara untuk menguji getZero fungsi:

package main

import "fmt"

func main() {
    i := getZero[int]()
    fmt.Printf("%T %v\n", i, i)

    s := getZero[string]()
    fmt.Printf("%T %q\n", s, s)

    p := getZero[image.Point]()
    fmt.Printf("%T %v\n", p, p)

    f := getZero[*float64]()
    fmt.Printf("%T %v\n", f, f)
}
Salin selepas log masuk

Output:

int 0
string ""
image.Point {0, 0}
*float64 <nil>
Salin selepas log masuk

Ini menunjukkan bahawa fungsi getZero mengembalikan nilai sifar yang dijangkakan untuk jenis yang berbeza.

Atas ialah kandungan terperinci Bagaimana untuk Mengembalikan Nilai Lalai untuk Jenis Generik dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan