Rumah > pembangunan bahagian belakang > Golang > Mengapa Kaedah My Go dengan Penerima Penunjuk Gagal Melaksanakan Antara Muka?

Mengapa Kaedah My Go dengan Penerima Penunjuk Gagal Melaksanakan Antara Muka?

Barbara Streisand
Lepaskan: 2024-12-13 15:47:11
asal
477 orang telah melayarinya

Why Does My Go Method with a Pointer Receiver Fail to Implement an Interface?

Kaedah Golang dengan Penerima Penunjuk [Pendua]

Masalah:

In Go, bila mencipta kaedah dengan penerima penunjuk dan melaksanakan antara muka, ralat berikut boleh berlaku:

cannot use obj (type Implementation) as type IFace in return argument: Implementation does not implement IFace (GetSomeField method has pointer receiver)
Salin selepas log masuk

Jawapan:

Untuk menyelesaikan ralat ini, pastikan penunjuk kepada struct melaksanakan antara muka. Ini membenarkan kaedah mengubah suai medan kejadian sebenar tanpa membuat salinan.

Pengubahsuaian Kod:

Ganti baris yang menyinggung dengan:

return &obj
Salin selepas log masuk

Penjelasan:

Dengan mengembalikan penunjuk ke struct, ia melaksanakan antara muka sambil membenarkan kaedah mengubah suai kejadian sebenar.

Contoh (Diubah suai):

package main

import (
    "fmt"
)

type IFace interface {
    SetSomeField(newValue string)
    GetSomeField() string
}

type Implementation struct {
    someField string
}

func (i *Implementation) GetSomeField() string {
    return i.someField
}

func (i *Implementation) SetSomeField(newValue string) {
    i.someField = newValue
}

func Create() *Implementation {
    return &Implementation{someField: "Hello"}
}

func main() {
    var a IFace
    a = Create()
    a.SetSomeField("World")
    fmt.Println(a.GetSomeField())
}
Salin selepas log masuk

Dengan menggunakan penerima penunjuk dan memastikan penunjuk melaksanakan antara muka, anda boleh berjaya mengubah suai contoh sebenar struct sambil melaksanakan kaedah yang diperlukan.

Atas ialah kandungan terperinci Mengapa Kaedah My Go dengan Penerima Penunjuk Gagal Melaksanakan Antara Muka?. 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