"tidak boleh menggunakan fungsi (jenis func()) sebagai jenis dalam hujah"
Kod Go ini bertujuan untuk menunjukkan perkhidmatan rantaian dengan menggunakan pelbagai fungsi seperti menggunakan mesej, menerbitkan mesej dan membalas mesej. Kod ini menggunakan perpustakaan asl untuk mengendalikan operasi pemesejan.
Apabila cuba melaksanakan kod, mesej ralat ditemui, menunjukkan bahawa fungsi UpperCaseHandler dan RepeatHandler tidak boleh digunakan sebagai argumen jenis asl.MessageHandler dalam ConsumeFunc kaedah perkhidmatan UpperCaser dan Repeater, masing-masing.
Untuk menyelesaikan isu ini, adalah perlu untuk memastikan bahawa tandatangan fungsi sepadan dengan format yang dijangkakan. Jenis asl.MessageHandler menjangkakan fungsi yang mengambil busboy.MessageDelivery sebagai hujah dan mengembalikan antara muka{} dan ralat.
type MessageHandler func(busboy.MessageDelivery) (interface{}, error)
Fungsi UpperCaseHandler dan RepeatHandler dalam kod anda tidak mematuhi jangkaan ini tandatangan. Mereka kekurangan nilai pulangan ralat. Untuk membetulkannya, ubah suai fungsi seperti berikut:
func UpperCaseHandler(md busboy.MessageDelivery) (interface{}, error) { s.Reply(MessageTest{strings.ToUpper(md.Message.(string))}, md.Delivery) return nil, nil } func RepeatHandler(md busboy.MessageDelivery) (interface{}, error) { s.Reply(MessageTest{strings.Repeat(md.Message.(string), 5)}, md.Delivery) return nil, nil }
Dengan menambahkan nilai pulangan ralat dan memastikan padanan yang betul dengan tandatangan asl.MessageHandler, kod tersebut harus dilaksanakan tanpa menghadapi ralat yang disebutkan di atas.
Atas ialah kandungan terperinci Mengapa Kod My Go Menghasilkan Ralat 'tidak boleh menggunakan fungsi (jenis func()) sebagai hujah jenis' Semasa Merangkai Perkhidmatan dengan Perpustakaan asl?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!