Menetapkan Sifat Struktur Secara Dinamik dalam Go
Dalam sampel kod yang diberikan, keperluan timbul untuk mengemas kini sifat struct secara dinamik berdasarkan nilai yang dibaca daripada sebuah fail. Daripada menyemak setiap nama sifat dan menetapkannya secara manual, pertimbangkan untuk memanfaatkan pakej pantulan yang berkuasa.
Pakej reflect membolehkan mengakses sifat struct dan nilainya secara dinamik. Begini cara untuk mencapai tetapan harta dinamik:
1. Cipta Fungsi Pembantu:
import ( "fmt" "errors" "reflect" ) // setField sets field of v with given name to given value. func setField(v interface{}, name string, value string) error { // v must be a pointer to a struct rv := reflect.ValueOf(v) if rv.Kind() != reflect.Ptr || rv.Elem().Kind() != reflect.Struct { return errors.New("v must be pointer to struct") } // Dereference pointer rv = rv.Elem() // Lookup field by name fv := rv.FieldByName(name) if !fv.IsValid() { return fmt.Errorf("not a field name: %s", name) } // Field must be exported if !fv.CanSet() { return fmt.Errorf("cannot set field %s", name) } // We expect a string field if fv.Kind() != reflect.String { return fmt.Errorf("%s is not a string field", name) } // Set the value fv.SetString(value) return nil }
2. Penggunaan:
var config SshConfig ... err := setField(&config, split[0], strings.Join(split[1:], " ")) if err != nil { // handle error }
Tetapan sifat dinamik ini membolehkan anda mengemas kini sifat struct dengan mudah tanpa nama sifat pengekodan keras.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menetapkan Sifat Struktur secara Dinamik dalam Go Menggunakan Refleksi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!