Mengapa Medan Struct Saya Berbalik Secara Tidak Dijangka dalam Go?

Susan Sarandon
Lepaskan: 2024-11-17 07:15:03
asal
140 orang telah melayarinya

Why Does My Struct Field Revert Unexpectedly in Go?

Struct Field Berbalik Tanpa Dijangka

Dalam Go, struct diluluskan mengikut nilai, bermakna perubahan yang dibuat kepada struct dalam fungsi tidak ditunjukkan dalam struct asal. Ini menjadi jelas dalam kod yang disediakan, di mana medan struct kembali kepada nilai asalnya walaupun nilai itu nampaknya berubah dalam kaedah.

Masalahnya terletak pada cara struct dihantar kepada kaedah. Dalam kod yang diberikan, kaedah TVManager sendMessage() sedang mengubah suai salinan medan penyambung dan sebarang perubahan yang dibuat di dalam kaedah tidak disebarkan kembali kepada struct asal.

Untuk membetulkannya, kaedah harus menggunakan penerima penunjuk. Dengan memberi awalan pada penerima dengan asterisk (*), kaedah akan menerima penunjuk kepada contoh struct sebenar dan sebarang perubahan yang dibuat dalam kaedah akan digunakan pada struct asal.

func (this *TVManager) sendMessage(message string) {
    fmt.Println("5", this.connector)
    payload := map[string]string{
        "id":    "0",
        "type":  "request",
        "uri":   "ssap://system.notifications/createToast",
        "payload": "{'message': 'This is a message'}",
    }
    this.connector.sendCommand(payload)
    fmt.Println("4", this.connector)
}
Salin selepas log masuk

Begitu juga, dalam objek olok-olok, kaedah sendCommand() juga harus menggunakan penerima penuding.

func (this *MockConnector) sendCommand(payload map[string]string) {
    fmt.Println("0", this)
    this.last_command = payload
    this.value = true
    fmt.Println("0", this)
}
Salin selepas log masuk

Konvensyen Go yang lain ialah mengelak daripada menggunakan "ini" atau "diri" sebagai nama penerima. Sebaliknya, adalah disyorkan untuk menggunakan nama ringkas dan deskriptif yang sepadan dengan kefungsian kaedah.

Dengan melaksanakan perubahan ini, medan struct akan berjaya dikemas kini tanpa kembali kepada nilai asalnya.

Atas ialah kandungan terperinci Mengapa Medan Struct Saya Berbalik Secara Tidak Dijangka 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