Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah saya boleh menentukan fungsi generik menggunakan struktur tersuai tanpa menyenaraikan semua struktur?

Bagaimanakah saya boleh menentukan fungsi generik menggunakan struktur tersuai tanpa menyenaraikan semua struktur?

PHPz
PHPzke hadapan
2024-02-09 20:30:10816semak imbas

Bagaimanakah saya boleh menentukan fungsi generik menggunakan struktur tersuai tanpa menyenaraikan semua struktur?

Dalam PHP, jika kita ingin menggunakan struktur tersuai untuk menentukan fungsi biasa tanpa perlu menyenaraikan semua struktur, terdapat cara yang cekap untuk melakukannya. Pendekatan ini dicapai dengan menggunakan bilangan parameter yang berubah-ubah. Kami boleh menerima sebarang bilangan parameter dengan menggunakan elips (...) sebagai nama parameter dalam definisi fungsi. Dalam badan fungsi, kita boleh menggunakan fungsi func_get_args() untuk mendapatkan semua hujah yang dihantar ke fungsi tersebut. Dengan cara ini, kita boleh menggunakan parameter ini di dalam fungsi tanpa mentakrifkan semua struktur terlebih dahulu. Pendekatan fleksibel ini boleh membantu kami menulis fungsi yang lebih umum dan boleh diguna semula serta meningkatkan kecekapan pengekodan.

Kandungan soalan

Andaikan saya mempunyai dua struktur berbeza:

type one struct {
  id string
  // other fields
}

type two struct {
  id string
  // other fields
}

Adakah mungkin untuk menentukan fungsi yang menerima kedua-duanya onetwo tanpa menyenaraikannya secara jelas sebagai pilihan?

Sebagai contoh saya sedang mencari sesuatu seperti ini:

type ModelWithId struct {
  Id string
}

func Test[M ModelWithId](m M) {
  fmt.PrintLn(m.Id)
}

one := One { Id: "1" }
Test(one) // Prints 1

Saya tidak mahu menggunakan functest[m one |两个](m m) kerana saya mungkin mempunyai 10+ struct dan saya tidak mahu perlu kembali ke fungsi itu setiap kali saya menambah struct baharu pada pangkalan kod.

Penyelesaian

Generik menggunakan kaedah untuk mengekang tingkah laku parameter jenis, jadi anda perlu menulis semula kod anda sebagai:

type one struct {
    id string
}

func (o *one) id() string {
    return o.id
}

Kemudian tapak penggunaan anda akan menjadi:

type ModelWithId interface {
    Id() string
}

func Test[M ModelWithId](m M) {
    fmt.Println(m.Id())
}

Atas ialah kandungan terperinci Bagaimanakah saya boleh menentukan fungsi generik menggunakan struktur tersuai tanpa menyenaraikan semua struktur?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam