Rumah > pembangunan bahagian belakang > Golang > Mengapa Go Throw Ralat 'Tidak Boleh Menggunakan Fungsi sebagai Jenis Argumen' dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Go Throw Ralat 'Tidak Boleh Menggunakan Fungsi sebagai Jenis Argumen' dan Bagaimana Saya Boleh Membetulkannya?

Barbara Streisand
Lepaskan: 2024-12-12 18:29:09
asal
270 orang telah melayarinya

Why Does Go Throw a

Tidak Boleh Menggunakan Fungsi sebagai Jenis dalam Argumen: Penyelesaian Masalah

Ralat ini berlaku apabila cuba menghantar fungsi sebagai argumen kepada fungsi lain, tetapi tandatangan fungsi tidak sepadan dengan jenis yang dijangkakan. Terutamanya dalam kes pengaturcaraan Go, isu ini timbul apabila anda cuba menghantar fungsi yang mengambil parameter berstruktur tertentu dan mengembalikan antara muka dan ralat sebagai keperluan untuk fungsi lain.

Memahami Masalah

Mesej ralat "tidak boleh menggunakan fungsi (jenis func()) sebagai jenis dalam argumen" bermakna fungsi yang anda cuba luluskan tidak sepadan dengan jenis yang diperlukan oleh hujahnya. Dalam kes ini, hujah menjangkakan pelaksanaan antara muka MessageHandler, yang mempunyai tandatangan fungsi tertentu.

Membetulkan Isu

Untuk menyelesaikan ralat ini, anda mesti memastikan bahawa fungsi anda mematuhi tandatangan jangkaan antara muka MessageHandler:

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

Ini bermakna fungsi anda mesti:

  • Ambil satu hujah jenis MessageDelivery.
  • Kembalikan tuple dengan dua nilai:

    • Nilai pertama hendaklah daripada jenis antara muka.
    • Nilai kedua hendaklah an ralat.

Contoh:

Ubah suai fungsi anda untuk diselaraskan dengan tandatangan yang diperlukan:

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

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

Kini, fungsi ini serasi dengan antara muka MessageHandler dan boleh dihantar sebagai hujah kepada Kaedah ConsumerFunc().

Atas ialah kandungan terperinci Mengapa Go Throw Ralat 'Tidak Boleh Menggunakan Fungsi sebagai Jenis Argumen' dan Bagaimana Saya Boleh Membetulkannya?. 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