Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mencipta Kejadian Go Hanya Menggunakan Nama Jenisnya sebagai Rentetan?

Bagaimanakah Saya Boleh Mencipta Kejadian Go Hanya Menggunakan Nama Jenisnya sebagai Rentetan?

Barbara Streisand
Barbara Streisandasal
2024-12-24 21:43:11836semak imbas

How Can I Create Go Instances Using Only Their Type Names as Strings?

Mencipta Contoh daripada Nama Jenis dalam Go

Dalam Go, tidak mudah untuk membuat instantiat objek apabila hanya nama jenis tersedia sebagai rentetan. Ini kerana Go ditaip secara statik dan mengalih keluar kod yang tidak digunakan semasa pemautan.

Menggunakan Refleksi

Walaupun terdapat kekangan, refleksi boleh digunakan untuk mencipta kejadian secara dinamik. Berikut ialah prosesnya:

  1. Isi peta global[rentetan]reflect.Taip untuk mengaitkan nama jenis dengan persamaan pantulannya. Ini boleh dilakukan dalam fungsi pemulaan pakej.
  2. Untuk membuat seketika objek, cari pantulannya. Taip dalam peta.
  3. Gunakan pantulan. Baharu untuk mendapatkan penunjuk kepada tika baharu.
  4. Ekstrak objek menggunakan jenis antara muka{} dan Elem().Interface(), yang menyahrujuk penuding dan menukarnya kepada antara muka nilai.

Contoh Kod:

import (
    "fmt"
    "reflect"
)

// Global map for type lookup
var typeMap = make(map[string]reflect.Type)

func init() {
    // Initialize typeMap by adding types to it
    typeMap["MyStruct"] = reflect.TypeOf(MyStruct{})
}

func main() {
    typeName := "MyStruct"
    t := typeMap[typeName]
    instance := reflect.New(t).Elem().Interface()
    fmt.Println(instance)
}

Pendekatan Alternatif

Selain refleksi, pertimbangkan perkara berikut alternatif:

  • Kaedah Kilang: Tentukan fungsi kilang untuk setiap jenis, membolehkan penciptaan dan penciptaan objek lebih mudah.
  • Fungsi Penciptaan Peta: Kekalkan antara muka map[rentetan]func(){}, dengan kekunci adalah jenis nama dan nilai ialah fungsi yang mengembalikan objek baharu.

Nota: Pendekatan ini mengelakkan kerumitan refleksi dan berkemungkinan meningkatkan pengendalian ralat semasa penyusunan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencipta Kejadian Go Hanya Menggunakan Nama Jenisnya 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