Memandangkan coretan kod berikut:
type foo struct {} func bar(baz interface{}) {}
di mana kedua-dua foo dan bar tidak boleh diubah mengikut reka bentuk , bagaimana anda boleh menukar penuding struktur &foo{} kepada nilai antara muka{} dan seterusnya gunakannya sebagai parameter untuk fungsi bar?
Mengirim penunjuk struct ke nilai antara muka{} adalah mudah:
f := &foo{} bar(f) // Every type implements interface{}, so no special action is required.
Memulihkan *foo asal penunjuk daripada nilai antara muka{} memerlukan sama ada penegasan jenis atau suis jenis.
Jenis Penegasan:
func bar(baz interface{}) { f, ok := baz.(*foo) if !ok { // The assertion failed because baz was not of type *foo. } // f is of type *foo. }
Suis Jenis:
func bar(baz interface{}) { switch f := baz.(type) { case *foo: // f is of type *foo. default: // f is some other type. } }
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Penunjuk Struct kepada Nilai{} antara muka dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!