Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah saya boleh mengubah suai Medan Struct melalui Kaedah Antara Muka Menggunakan Penerima Penunjuk dalam Go?

Bagaimanakah saya boleh mengubah suai Medan Struct melalui Kaedah Antara Muka Menggunakan Penerima Penunjuk dalam Go?

Barbara Streisand
Lepaskan: 2024-12-12 11:56:18
asal
351 orang telah melayarinya

How Can I Modify a Struct's Field via an Interface Method Using Pointer Receivers in Go?

Penerima penunjuk untuk kaedah Golang

Di Golang, penerima merujuk kepada objek yang bertanggungjawab untuk mengendalikan panggilan kaedah. Mengikut jenis penerima, ia boleh dibahagikan kepada penerima nilai dan penerima penunjuk.

Dalam contoh yang diberikan, penerima kaedah SetSomeField ialah penerima nilai, yang bermaksud kaedah tersebut beroperasi pada salinan pembolehubah yang dicipta apabila kaedah itu dipanggil. Ini menyebabkan kaedah tidak dapat mengubah suai contoh sebenar tetapi hanya mengemas kini salinan, yang membawa kepada tingkah laku yang tidak dijangka.

Untuk menyelesaikan masalah ini, penerima kaedah SetSomeField perlu ditukar kepada penerima penunjuk. Penerima penunjuk membenarkan kaedah untuk mengubah suai contoh sebenar kerana mereka mengakses alamat ingatan kejadian secara langsung.

Walau bagaimanapun, ini akan mewujudkan masalah baharu: struktur tidak lagi melaksanakan antara muka. Ini kerana antara muka memerlukan kaedah SetSomeField untuk ditakrifkan sebagai penerima nilai dan penerima penunjuk tidak serasi.

Penyelesaian adalah untuk mencipta fungsi Cipta yang mengembalikan jenis penerima penuding dan kemudian menetapkan penuding ini kepada pembolehubah yang melaksanakan antara muka. Ini membenarkan kaedah untuk mengubah suai tika sebenar sambil masih mematuhi definisi antara muka:

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, kaedah SetSomeField boleh mengubah suai tika sebenar semasa masih melaksanakan antara muka. Ini memastikan kaedah tersebut mengubah keadaan objek seperti yang diharapkan.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengubah suai Medan Struct melalui Kaedah Antara Muka Menggunakan Penerima Penunjuk dalam Go?. 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