Rumah > pembangunan bahagian belakang > Golang > Mengapa Golang Melemparkan Ralat 'tidak boleh menggunakan fungsi (jenis func()) sebagai jenis argumen' Semasa Melepasi Fungsi?

Mengapa Golang Melemparkan Ralat 'tidak boleh menggunakan fungsi (jenis func()) sebagai jenis argumen' Semasa Melepasi Fungsi?

Patricia Arquette
Lepaskan: 2024-12-11 09:37:10
asal
710 orang telah melayarinya

Why Does Golang Throw a

"tidak boleh menggunakan fungsi (jenis func()) sebagai jenis dalam argumen"

Di Golang, apabila menghantar fungsi sebagai argumen kepada fungsi lain, jenis tandatangan fungsi yang diluluskan mesti sepadan dengan tandatangan yang dijangkakan bagi fungsi penerima. Dalam kod anda, anda cuba menghantar fungsi berikut sebagai argumen:

UpperCaseHandler
RepeatHandler
Salin selepas log masuk

Walau bagaimanapun, tandatangan jenis yang dijangkakan untuk fungsi pengendali mesej ialah:

type MessageHandler func(MessageDelivery) (interface{}, error)
Salin selepas log masuk

Seperti yang anda lihat , fungsi pengendali mesej yang dijangka mengambil struct MessageDelivery sebagai hujah dan mengembalikan antara muka{} dan ralat. Fungsi anda, walau bagaimanapun, ditakrifkan seperti berikut:

func UpperCaseHandler(md asl.MessageDelivery) {
     s.Reply(MessageTest{strings.ToUpper(md.Message.(string))}, md.Delivery)
}

func RepeatHandler(md asl.MessageDelivery) {
     s.Reply(MessageTest{strings.Repeat(md.Message.(string), 5)}, md.Delivery)
}
Salin selepas log masuk

Perhatikan bahawa fungsi anda tiada nilai pulangan (antara muka{} dan ralat). Untuk membetulkannya, anda perlu mengubah suai fungsi anda agar sepadan dengan tandatangan yang dijangkakan. Begini cara anda boleh melakukannya:

func UpperCaseHandler(md asl.MessageDelivery) (interface{}, error} {
     s.Reply(MessageTest{strings.ToUpper(md.Message.(string))}, md.Delivery)
     return nil, nil
}

func RepeatHandler(md asl.MessageDelivery) (interface{}, error} {
     s.Reply(MessageTest{strings.Repeat(md.Message.(string), 5)}, md.Delivery)
     return nil, nil
}
Salin selepas log masuk

Dengan menambah nilai pulangan yang hilang, fungsi anda kini akan sepadan dengan tandatangan yang dijangkakan dan anda akan dapat menghantarnya sebagai argumen kepada fungsi lain tanpa menemui " tidak boleh menggunakan fungsi (type func()) sebagai ralat taip argumen".

Atas ialah kandungan terperinci Mengapa Golang Melemparkan Ralat 'tidak boleh menggunakan fungsi (jenis func()) sebagai jenis argumen' Semasa Melepasi Fungsi?. 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