Rumah > pembangunan bahagian belakang > Golang > Mengapa Kaedah Antara Muka Go Saya Jenis Pulangan Menyebabkan Ralat Penyusunan?

Mengapa Kaedah Antara Muka Go Saya Jenis Pulangan Menyebabkan Ralat Penyusunan?

Linda Hamilton
Lepaskan: 2024-11-09 22:38:02
asal
799 orang telah melayarinya

Why Does My Go Interface Method Return Type Cause a Compilation Error?

Kaedah Antara Muka Jenis Kembali sebagai Antara Muka dalam Go

Soalan:

Melaksanakan antara muka kaedah yang mengembalikan jenis antara muka dalam Golang boleh menyebabkan ralat penyusunan. Pertimbangkan kod berikut:

type IA interface {
    FB() IB
}

type IB interface {
    Bar() string
}

type A struct {
    b *B
}

func (a *A) FB() *B {
    return a.b
}

type B struct{}

func (b *B) Bar() string {
    return "Bar!"
}
Salin selepas log masuk

Menjalankan kod ini menyebabkan ralat berikut:

cannot use a (type *A) as type IA in function argument:
    *A does not implement IA (wrong type for FB method)
        have FB() *B
        want FB() IB
Salin selepas log masuk

Penyelesaian:

Untuk menyelesaikan isu ini , jenis pemulangan kaedah FB mesti sepadan dengan jenis yang dinyatakan dalam antara muka IA. Oleh itu, perubahan berikut diperlukan:

func (a *A) FB() IB {
    return a.b
}
Salin selepas log masuk

Dengan pengubahsuaian ini, kod akan berjaya disusun kerana jenis pemulangan FB kini ialah IB, seperti yang ditakrifkan dalam antara muka IA.

Pertimbangan Tambahan:

Jika antara muka IA dan IB ditakrifkan dalam pakej berasingan, penyataan import untuk pakej yang mengandungi IB mesti disertakan dalam fail di mana kaedah FB dilaksanakan. Selain itu, jenis pemulangan FB mesti memenuhi syarat dengan nama pakej yang sesuai:

import (
    "foo" // Package containing IB interface
)

// Implementation in package bar
func (a *A) FB() foo.IB {
    return a.b
}
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Kaedah Antara Muka Go Saya Jenis Pulangan Menyebabkan Ralat Penyusunan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan