Senario aplikasi khusus generik dalam golang

WBOY
Lepaskan: 2024-05-04 11:45:02
asal
680 orang telah melayarinya

Senario aplikasi generik dalam Go: Operasi pengumpulan: Buat operasi pengumpulan yang sesuai untuk sebarang jenis, seperti penapisan. Struktur Data: Tulis struktur data tujuan umum seperti baris gilir, tindanan dan peta untuk menyimpan dan memanipulasi pelbagai jenis data. Algoritma: Tulis algoritma tujuan umum seperti pengisihan, carian dan pengurangan yang boleh mengendalikan pelbagai jenis data.

Senario aplikasi khusus generik dalam golang

Senario aplikasi khusus bagi generik dalam Go

Generik ialah ciri utama yang diperkenalkan dalam Go 1.18, yang membolehkan kami menggunakan pembolehubah jenis dalam sistem jenis. Ini menyediakan keupayaan berkuasa untuk penggunaan semula kod dan pengurangan redundansi, terutamanya apabila melaksanakan struktur atau algoritma data biasa.

1. Tetapkan operasi

Menggunakan generik, kami boleh membuat operasi set dengan mudah untuk mana-mana jenis T. Contohnya:

func Filter[T any](slice []T, pred func(T) bool) []T {
    var filtered []T
    for _, v := range slice {
        if pred(v) {
            filtered = append(filtered, v)
        }
    }
    return filtered
}
Salin selepas log masuk

2. Struktur data

Generik boleh membantu kami menulis struktur data biasa, seperti baris gilir, tindanan atau peta. Struktur data ini boleh menyimpan dan memanipulasi pelbagai jenis data, memberikan fleksibiliti yang lebih besar.

type Queue[T any] struct {
    items []T
}

func (q *Queue[T]) Enqueue(item T) {
    q.items = append(q.items, item)
}

func (q *Queue[T]) Dequeue() T {
    item := q.items[0]
    q.items = q.items[1:]
    return item
}
Salin selepas log masuk

3. Algoritma

Generik juga membolehkan kami menulis algoritma tujuan umum seperti operasi pengisihan, carian atau pengurangan. Algoritma ini boleh mengendalikan pelbagai jenis data, memastikan kebolehgunaan semula kod dan kebolehselenggaraan.

func Sort[T any](slice []T) []T {
    sort.Slice(slice, func(i, j int) bool { return slice[i] < slice[j] })
    return slice
}
Salin selepas log masuk

Kes praktikal: Jenis pengisihan tersuai

Pertimbangkan struktur Pelanggan yang mengandungi pelbagai jenis data: Customer 结构:

type Customer struct {
    ID    int
    Name  string
    Age   int
    Score float64
}
Salin selepas log masuk

我们可以使用泛型编写一个通用的 SortCustomers

func SortCustomers[T comparable](customers []Customer, field T) []Customer {
    sort.Slice(customers, func(i, j int) bool {
        return customers[i][field] < customers[j][field]
    })
    return customers
}
Salin selepas log masuk

Kami boleh menggunakan generik untuk menulis fungsi SortCustomers umum, untuk mengisih pelanggan berdasarkan mana-mana medan:

sortedByID := SortCustomers(customers, customers[0].ID)
sortedByName := SortCustomers(customers, customers[0].Name)
Salin selepas log masuk
Fungsi ini boleh mengisih berdasarkan ID pelanggan, nama, umur atau skor, seperti yang ditunjukkan di bawah: 🎜rrreee

Atas ialah kandungan terperinci Senario aplikasi khusus generik 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