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
Patricia Arquetteasal
2024-12-11 09:37:10692semak imbas

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

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

type MessageHandler func(MessageDelivery) (interface{}, error)

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

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
}

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!

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