Rumah > pembangunan bahagian belakang > Golang > Mengapa Antara Muka Pergi Tidak Boleh Menyokong Kaedah Penetap Secara Terus, dan Bagaimana Ini Boleh Diatasi?

Mengapa Antara Muka Pergi Tidak Boleh Menyokong Kaedah Penetap Secara Terus, dan Bagaimana Ini Boleh Diatasi?

Mary-Kate Olsen
Lepaskan: 2024-11-25 00:50:14
asal
272 orang telah melayarinya

Why Can't Go Interfaces Directly Support Setter Methods, and How Can This Be Worked Around?

Polimorfisme dalam Go: Pandangan Lebih Dekat pada Kaedah Antara Muka dan Penerima Penunjuk

Dalam Go, polimorfisme tidak disokong secara asli, tetapi ia boleh dicapai menggunakan antara muka. Ini memperkenalkan soalan biasa: mengapa kaedah penetap tidak dibenarkan untuk antara muka?

Seperti yang ditunjukkan dalam kod yang disediakan, apabila kaedah penetap ditakrifkan sebagai penerima nilai, perubahan yang dibuat dalam fungsi hilang apabila ia keluar . Mengubah suai penerima kepada penerima penuding membenarkan perubahan kekal, tetapi ia menimbulkan ralat kompilasi.

Untuk menangani perkara ini, Go menyediakan penyelesaian. Kod yang diperbetulkan mengubah suai penerima kaedah penetap menjadi penunjuk. Ini membolehkan fungsi mengubah suai struktur data asas dan mengekalkan perubahan. Kod yang diubah suai menggunakan antara muka, memastikan kaedah penerima penunjuk boleh diakses melalui antara muka.

package main

import "fmt"

type MyInterfacer interface {
    Get() int
    Set(i int)
}

type MyStruct struct {
    data int
}

func (this *MyStruct) Get() int {
    return this.data
}

func (this *MyStruct) Set(i int) {
    this.data = i
}

func main() {
    s := &MyStruct{123}
    fmt.Println(s.Get())

    s.Set(456)
    fmt.Println(s.Get())

    var mi MyInterfacer = s
    mi.Set(789)
    fmt.Println(mi.Get())
}
Salin selepas log masuk

Walaupun ini bukan polimorfisme sepenuhnya, ia berkesan mencapai hasil yang serupa dengan menggunakan antara muka dan penerima penunjuk. Kod ini boleh digunakan untuk menetapkan sifat melalui antara muka, merangkum data dan operasi dengan bersih.

Atas ialah kandungan terperinci Mengapa Antara Muka Pergi Tidak Boleh Menyokong Kaedah Penetap Secara Terus, dan Bagaimana Ini Boleh Diatasi?. 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