Antara muka seketika

WBOY
Lepaskan: 2024-02-08 21:08:41
ke hadapan
370 orang telah melayarinya

Antara muka seketika

Editor PHP Youzi di sini untuk memperkenalkan kepada anda apa itu antara muka instantiasi. Dalam pengaturcaraan berorientasikan objek, antara muka ialah konvensyen yang mentakrifkan kaedah yang harus dilaksanakan oleh kelas. Menghidupkan antara muka merujuk kepada mencipta objek kelas untuk melaksanakan kaedah yang ditakrifkan dalam antara muka. Dengan membuat seketika antara muka, kita boleh memanfaatkan ciri polimorfik supaya kelas yang berbeza boleh melaksanakan antara muka yang sama dan menulis semula kaedah yang sepadan mengikut situasi sebenar. Penggunaan antara muka instantiasi boleh menjadikan kod kami lebih fleksibel dan boleh diperluaskan, dan meningkatkan kebolehgunaan semula dan kebolehselenggaraan kod. Mari kita lihat lebih dekat pada penggunaan dan langkah berjaga-jaga bagi antara muka yang dibuat segera.

Kandungan soalan


Saya baru pergi. Satu perkara yang saya tidak faham ialah mengapa saya mendapat ralat kompilasi apabila saya mahu membuat instantiate antara muka secara individu, tetapi tidak apabila saya menggunakan bentuk tatasusunan antara muka.

type Flag interface {
  fmt.Stringer
}

func TestCheckRequiredFlag(t *testing.T) {
    testdata := []struct {
        st []Flag
    }{
        {
            st: []Flag{//allowed
                &StringFlag{Name: ""},
            },
        },
    }

    st := struct {
        st Flag
    }{
        st: Flag{// is not allowed
            &StringFlag{Name: ""},
        },
    }
}
Salin selepas log masuk

Kompaun literal ini memperuntukkan contoh struktur baharu dengan nilai yang diberikan.


Penyelesaian


sintaks {} 用于切片、结构、数组和映射的文字值。它们不用于接口值。如果您想要接口类型的文字值,则必须使用 (), yang memanggil "penukaran jenis".

Contohnya:

x := myinterface(&mystruct{})
Salin selepas log masuk

x 的类型为 myinterface.

Untuk membetulkan kod anda:

    st := struct {
        st flag
    }{
        st: flag(
            &stringflag{name: ""},
        ),
    }
Salin selepas log masuk

Anda juga boleh mengalih keluar penukaran jenis sepenuhnya, kerana go membenarkan penetapan terus kepada nilai antara muka dan penukaran adalah tersirat. Lebih khusus lagi, peraturan Kebolehtugasan berkata (diedit untuk kejelasan):

Jika t ialah jenis antara muka dan x melaksanakan t, maka nilai x jenis v boleh diserahkan kepada pembolehubah jenis t.

Jadi, kod ini juga akan berfungsi:

    st := struct {
        st Flag
    }{
        st: &StringFlag{Name: ""},
    }
Salin selepas log masuk

Perhatikan bahawa dalam literal majmuk seperti kepingan, struktur dan peta, nilai yang diberikan dianggap ditugaskan kepada indeks, medan atau kunci masing-masing seolah-olah ia adalah pembolehubah, jadi peraturan kebolehtugasan terpakai.

Atas ialah kandungan terperinci Antara muka seketika. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:stackoverflow.com
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!