Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Ulangi peta "antara muka{}" dan panggil kaedah yang sama pada setiap item dalam Golang

Ulangi peta "antara muka{}" dan panggil kaedah yang sama pada setiap item dalam Golang

王林
王林ke hadapan
2024-02-05 11:57:54553semak imbas

.

迭代“interface{}”的映射并在 Golang 中的每个项目上调用相同的方法Saya mempunyai antara muka yang dipetakan sebagai medan dalam struct seperti ini:

type room struct {
    // ...
    components map[string]interface{}
    // ...
}
Saya perlu mengulangi peta dan memanggil kaedah
untuk setiap item yang disimpan dalam peta. Sebagai contoh dalam js atau php ini tidak akan menjadi masalah, tetapi dalam perjalanan saya menghantukkan kepala saya ke dinding sepanjang hari.

Saya perlukan sesuatu seperti ini:

for _, v := range currentroom.components {
    v.render()
}

Ini tidak berjaya, tetapi apabila saya menyatakan jenis dan memanggil setiap item secara manual secara individu, ia berjaya:

currentRoom.Components["menu"].(*List.List).Render()
currentRoom.Components["header"].(*Header.Header).Render()

Bagaimana untuk memanggil kaedah render() 方法(假设它们都实现 render() pada setiap item dalam peta? Atau jika ada cara yang lebih baik/berbeza untuk menyelesaikan masalah ini, tolong beri pencerahan kepada saya kerana saya berada di hujung akal saya di sini.

Jawapan betul

Tentukan antara muka:render()

type renderable interface {
   render()
}

Anda kemudian boleh menaip menegaskan elemen peta dan membuat panggilan selagi mereka melaksanakan kaedah itu:
currentroot.components["menu"].(renderable).render()

Untuk menguji sama ada sesuatu boleh ditukar, gunakan:

renderable, ok:=currentRoot.Components["menu"].(Renderable)
if ok {
   renderable.Render()
}

Atas ialah kandungan terperinci Ulangi peta "antara muka{}" dan panggil kaedah yang sama pada setiap item dalam Golang. 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