Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Saya Boleh Mendapatkan Kembali Tandatangan Fungsi Go sebagai Rentetan?

Bagaimanakah Saya Boleh Mendapatkan Kembali Tandatangan Fungsi Go sebagai Rentetan?

Patricia Arquette
Patricia Arquetteasal
2024-11-23 00:12:34978semak imbas

How Can I Retrieve a Go Function's Signature as a String?

Mengambil semula Tandatangan Fungsi sebagai Rentetan dalam Go

In Go, menentukan tandatangan fungsi dengan nama dan tandatangan tertentu dalam pakej utama adalah penting untuk menyediakan mesej ralat bermaklumat sekiranya berlaku percanggahan.

Boleh mencerminkan.Type.String() Dapatkan Tandatangan?

Semasa reflect.Type.String() menawarkan nama jenis (seperti main.ModuleInitFunc) , ia gagal dalam menyediakan tandatangan penuh. Ini amat jelas apabila berurusan dengan nilai fungsi yang telah menamakan jenis.

Membina Tandatangan

Untuk membina tandatangan, kita mesti mengumpulkan maklumat secara manual daripada reflect.Type .

  • Type.In() menyediakan jenis ith parameter.
  • Type.Out() menyediakan jenis ith jenis hasil.

Contoh Pelaksanaan

Di bawah ialah contoh fungsi yang menjana tandatangan fungsi value:

func signature(f interface{}) string {
    t := reflect.TypeOf(f)
    if t.Kind() != reflect.Func {
        return "<not a function>"
    }

    ...

    return buf.String()
}

Fungsi ini membina tandatangan dengan mengulangi jenis input dan output dan memasangnya menjadi rentetan yang boleh dibaca manusia.

Menguji Fungsi Tandatangan

Menguji fungsi tandatangan menghasilkan yang berikut keputusan:

fmt.Println(signature(func(i int) error { return nil })) // func (int) error
fmt.Println(signature(myFunc)) // func (int) error
fmt.Println(signature(time.Now)) // func () time.Time
fmt.Println(signature(os.Open)) // func (string) (*os.File, error)
fmt.Println(signature(log.New)) // func (io.Writer, string, int) *log.Logger
fmt.Println(signature("")) // <not a function>

Adalah penting untuk ambil perhatian bahawa Go tidak menyediakan akses kepada parameter dan nama jenis hasil, jadi nama tersebut diabaikan daripada tandatangan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Kembali Tandatangan Fungsi Go sebagai Rentetan?. 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