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
Barbara Streisandasal
2024-12-13 15:47:11445semak imbas

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)

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

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())
}

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!

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