Antara muka seketika

WBOY
WBOYke hadapan
2024-02-08 21:08:41408semak imbas

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: ""},
        },
    }
}

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


Penyelesaian


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

Contohnya:

x := myinterface(&mystruct{})

x 的类型为 myinterface.

Untuk membetulkan kod anda:

    st := struct {
        st flag
    }{
        st: flag(
            &stringflag{name: ""},
        ),
    }

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: ""},
    }

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!

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