Rumah >pembangunan bahagian belakang >Golang >Pergi: Cara menggunakan antara muka dalam peta dan kepingan
Editor PHP Apple akan memperkenalkan anda cara menggunakan antara muka dalam peta dan menghiris. Dalam pembangunan web moden, peta dan jubin adalah keperluan fungsian biasa. Menggunakan antara muka boleh menjadikan operasi peta dan jubin lebih fleksibel dan berskala. Artikel ini akan menerangkan secara terperinci konsep antara muka dan cara menggunakan antara muka untuk melaksanakan pelbagai fungsi dalam peta dan jubin. Dengan membaca artikel ini, anda akan belajar cara mengoptimumkan penggunaan peta dan jubin untuk meningkatkan pengalaman dan prestasi pengguna. Mari kita terokai topik menarik ini bersama-sama!
Saya memerlukan peta antara muka kerana saya mahu dapat menjalankan fungsi yang boleh menggunakan pelaksanaan konkrit sama ada antara muka, tanpa mengambil berat tentang perkara "tambahan" yang boleh dilakukan oleh struktur ini.
Saya membaca https://jordanorelli.com/post/32665860244/how-to-use-interfaces-in-go dan ia mempunyai penjelasan yang baik tentang petunjuk dan antara muka tetapi saya masih tidak tahu cara melakukannya dalam amalan Ingin benda.
Saya sedang mencuba kod berikut:
https://play.golang.com/p/nrh2iyk7t9f
package main import ( "fmt" ) type iexample interface { getname() string } type concrete struct { name string } func (c *concrete) getname() string { return c.name } func main() { // in my real application this is a slice returned from gorm orm var s = []concrete{ concrete{name: "one"}, concrete{name: "two"}, } foo := make(map[string]iexample) bar := []iexample{} for _, c := range s { foo[c.name] = &c bar = append(bar, &c) fmt.printf("set key [%s]\r\n", c.name) } for name, element := range foo { fmt.printf("key: [%s] has element [%s]\r\n", name, element.getname()) } for name, element := range bar { fmt.printf("key: [%d] has element [%s]\r\n", name, element.getname()) } }
Keluaran:
set key [one] set key [two] key: [one] has element [two] key: [two] has element [two] key: [0] has element [two] key: [1] has element [two]
Apa yang saya mahukan ialah elemen satu berada dalam kunci "satu".
Saya rasa masalah berlaku kerana menggunakan petikan foo[c.name] = &c
进行的分配。我需要这个,因为否则我会收到错误“cannot use c (concrete 类型的变量) 作为赋值中的 iexample 值:concrete 未实现 iexample(方法 getname 有指针接收器)
"
Selepas membaca https://dusted.codes/using-go-generics-to-pass-struct-slices-for-interface-slices Saya ingin tahu sama ada saya boleh menggunakan generik untuk menyelesaikan masalah tetapi saya tidak tahu macam mana nak buat.
type ExampleMap map[string]IExample func (e *ExampleMap) add[T IExample](id string item T) { e[id] = item } // syntax error: method must have no type parameters
Bagaimana untuk menjadikan peta ini mengandungi elemen yang betul?
Apa yang anda lakukan adalah betul. Anda hanya meletakkan perkara yang salah ke dalam peta:
for i,c := range s { foo[c.Name] = &s[i] bar = append(bar, &s[i]) fmt.Printf("Set key [%s]\r\n", c.Name) }
Pembolehubah gelung ditimpa pada setiap lelaran, jadi apabila anda menetapkan alamat &c
添加到映射和切片时,您添加的指针就是 c
, alamat tersebut ditimpa pada setiap lelaran.
Atas ialah kandungan terperinci Pergi: Cara menggunakan antara muka dalam peta dan kepingan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!