Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menukar Penunjuk Struct kepada Nilai{} antara muka dalam Go?

Bagaimanakah Saya Boleh Menukar Penunjuk Struct kepada Nilai{} antara muka dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-01 03:14:10589semak imbas

How Can I Convert a Struct Pointer to an interface{} Value in Go?

Menukar Penunjuk Struktur kepada Nilai{} Antara Muka

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?

Penyelesaian

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!

Kenyataan:
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