Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menangani \'Menggunakan pembolehubah pada skop julat x dalam fungsi literal (scopelint)\' dalam Go?

Bagaimana untuk Menangani \'Menggunakan pembolehubah pada skop julat x dalam fungsi literal (scopelint)\' dalam Go?

Linda Hamilton
Lepaskan: 2024-10-26 23:24:30
asal
754 orang telah melayarinya

How to Address

Menggunakan Pembolehubah Julat dalam Huruf Fungsi (scopelint)

Dalam Go, adalah amalan biasa untuk mentakrifkan literal fungsi dan menghantarnya kepada fungsi tertib lebih tinggi. Walau bagaimanapun, menggunakan pembolehubah julat dalam literal fungsi boleh menimbulkan kebimbangan mengenai skop pembolehubah.

Dalam coretan kod berikut:

<code class="go">func TestGetUID(t *testing.T) {
    namespace := "lkfm"
    expecteduid := "fake_uid"
    var tests = []struct {
        description string
        expected    string
        namespace   string
        objs        []runtime.Object
    }{
        {"PositiveScenario", expecteduid, namespace, []runtime.Object{simpleNamespace(namespace)}},
    }

    for _, x := range tests {
        t.Run(x.description, func(t *testing.T) {
            client := fake.NewSimpleClientset(x.objs...)
            actual := getUID(client, x.namespace)
            assert.Equal(t, x.expected, actual)
        })
    }
}</code>
Salin selepas log masuk

Pemeriksa lint menimbulkan ralat: "Menggunakan pembolehubah pada skop julat x dalam fungsi literal (scopelint)".

Memahami Isu

Ralat berpunca daripada menggunakan pembolehubah gelung x dalam literal fungsi yang dihantar kepada t.Run(). Pengkompil tidak pasti sama ada fungsi literal akan dipanggil selepas t.Run() kembali. Jika ya, fungsi literal akan merujuk kepada pembolehubah gelung, yang berpotensi ditimpa dengan nilai daripada lelaran seterusnya.

Penyelesaian: Menggunakan Salinan Pembolehubah

Untuk menyelesaikan isu, ubah suai kod untuk menghantar nilai pembolehubah gelung kepada fungsi literal atau mencipta salinannya. Oleh kerana tandatangan fungsi telah ditetapkan, buat salinan pembolehubah seperti berikut:

<code class="go">x2 := x</code>
Salin selepas log masuk

Kemudian, rujuk kepada x2 dalam literal fungsi. Ini akan memuaskan penyemak lint.

Sebagai alternatif, memandangkan niat untuk membuat salinan adalah jelas, nama yang sama boleh digunakan untuk kedua-dua salinan dan pembolehubah gelung:

<code class="go">x := x</code>
Salin selepas log masuk

Ini akan membayangi pembolehubah gelung dan menjadikannya setempat kepada fungsi literal.

Atas ialah kandungan terperinci Bagaimana untuk Menangani \'Menggunakan pembolehubah pada skop julat x dalam fungsi literal (scopelint)\' dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan