Akses Dinamik kepada Harta Struktur di Golang
Seseorang mungkin menghadapi keperluan untuk mengakses dan mengemas kini sifat struct secara dinamik dalam Go. Ini boleh dicapai menggunakan pakej reflect, yang membolehkan refleksi masa jalan dan manipulasi jenis dan nilai.
Untuk menetapkan medan struct dengan namanya, anda boleh menggunakan pakej reflect untuk mendapatkan nilai medan dan berikan nilai baharu kepadanya. Berikut ialah fungsi yang melaksanakan fungsi ini:
// 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 }
Untuk menggunakan fungsi ini, anda akan memanggilnya seperti ini:
var config SshConfig ... err := setField(&config, split[0], strings.Join(split[1:], " ")) if err != nil { // handle error }
Pendekatan ini membolehkan anda menetapkan nilai struct secara dinamik medan tanpa memerlukan pernyataan if-else yang jelas atau tukar kes.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses dan Kemas Kini Sifat Struktur Secara Dinamik dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!