Rumah  >  Artikel  >  pembangunan bahagian belakang  >  pembolehubah tetapan pantulan golang

pembolehubah tetapan pantulan golang

WBOY
WBOYasal
2023-05-09 19:14:36485semak imbas

Kata Pengantar

Dalam pembangunan, kita selalunya perlu melakukan operasi pantulan pada struktur, pembolehubah, dsb. Menggunakan pantulan, kita boleh mengendalikan pembolehubah, jenis dan maklumat lain yang berkaitan secara langsung, yang menjadikan kod kita lebih abstrak dan fleksibel , menjadikan program Logiknya lebih jelas dan mudah. Antaranya, golang menyediakan pakej berkaitan pantulan reflect Artikel ini akan memfokuskan pada pakej reflect untuk menerangkan cara menggunakan pantulan untuk menetapkan pembolehubah.

Asas

Sebelum kita menyelami cara menetapkan pembolehubah menggunakan pantulan, kita perlu memahami beberapa asas.

  • Type: Jenis pembolehubah Gunakan kaedah reflect.TypeOf() untuk mendapatkan jenis pembolehubah.
  • Value: boleh difahami sebagai nilai pembolehubah, dan nilai pembolehubah boleh diperoleh menggunakan kaedah reflect.ValueOf().
  • reflect.Value mempunyai atribut berikut:

    • Kind(): Mendapat jenis nilai dan nilai pulangan ialah jenis reflect.Kind.
    • Int(), Float(), Bool(), String(), Bytes(), Interface(), dsb.: Dapatkan nilai yang sepadan.
    • Set(): Tetapkan nilai, tetapi anda perlu memastikan bahawa nilai semasa adalah daripada jenis boleh tetap. Sila rujuk reflect.Value.Set() untuk butiran.

Nilai tetapan refleksi

Pembolehubah tetapan refleksi terbahagi terutamanya kepada langkah berikut:

  1. Dapatkan pembolehubah reflect.Value Nilai;
  2. menentukan sama ada nilai ialah nilai boleh ditetapkan, yang boleh diubah suai dengan kaedah reflect.Value.Set()
  3. menetapkan nilai.
Ambil kod sampel sebagai contoh:

type Person struct {
    Name string
    Age  int
}

func main() {
    p := Person{
        Name: "John",
        Age:  25,
    }

    v := reflect.ValueOf(p)

    if v.Kind() == reflect.Struct {
        name := v.FieldByName("Name")
        age := v.FieldByName("Age")

        if name.IsValid() && name.CanSet() {
            name.SetString("Tom")
        }

        if age.IsValid() && age.CanSet() {
            age.SetInt(30)
        }
    }

    fmt.Println(p)
}

Antaranya:

  • Pembolehubah adalah daripada jenis v, dan pembolehubah reflect.Value diperoleh p; Value
  • memperoleh atribut (medan) pembolehubah melalui
  • dan nilai v.FieldByName() Name dan Age; > menentukan sama ada reflect.Value dan
  • adalah Nilai boleh ditetapkan, iaitu, ia mesti memenuhi kesahihan dan kebolehtetapan untuk butiran, sila rujuk
  • name boleh melengkapkan pengubahsuaian atribut age dan reflect.Value.CanSet() dalam pembolehubah
  • melalui kaedah tetapan.
  • pNamePerlu diambil perhatian bahawa sebelum menetapkan nilai, anda perlu menentukan sama ada pembolehubah boleh ditetapkan, jika tidak, pengecualian Age akan dilemparkan.
Ringkasan

panicPembolehubah Tetapan Refleksi Golang Berbanding dengan bahasa lain, operasi pembolehubah tetapan pantulan golang adalah sangat intuitif dan mudah, dan jenis yang disokong juga sangat kaya, yang menjadikan kami lebih cekap dalam pembangunan. Walau bagaimanapun, perlu diingatkan bahawa apabila menggunakan refleksi, anda perlu memberi perhatian kepada kedua-dua prestasi dan kebolehselenggaraan Ia tidak boleh digunakan secara berlebihan, jika tidak, ia akan membawa kepada masalah seperti penurunan kebolehbacaan program dan prestasi.

Atas ialah kandungan terperinci pembolehubah tetapan pantulan golang. 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