Rumah > pembangunan bahagian belakang > Golang > Mengapa Inferens Jenis Go Gagal dengan Tugasan Medan Struktur?

Mengapa Inferens Jenis Go Gagal dengan Tugasan Medan Struktur?

Susan Sarandon
Lepaskan: 2024-12-21 01:16:13
asal
981 orang telah melayarinya

Why Does Go's Type Inference Fail with Struct Field Assignments?

Taip Inferens dalam Tugasan dengan Struktur

Taip inferens dalam Go ialah ciri mudah yang membolehkan anda meninggalkan anotasi jenis eksplisit dalam senario tertentu. Walau bagaimanapun, apabila memberikan nilai kepada medan jenis berstruktur, had tertentu boleh timbul.

Pertimbangkan coretan kod berikut:

i := 10
next := 11
prev, i := i, next
Salin selepas log masuk

Di sini, tugasan kepada i menyimpulkan jenis prev dan mengisytiharkan ia sebagai int.

type Foo struct {
    Bar int
}

f := Foo{10}
next := 11
prev, f.Bar := f.Bar, next
Salin selepas log masuk

Dalam kod ini, bagaimanapun, tugasan kepada f.Bar gagal membuat kesimpulan jenis prev. Sebaliknya, ia menghasilkan ralat: "bukan nama di sebelah kiri :=".

Mengapa ini berlaku? Ternyata kehadiran jenis struct (Foo) mengganggu proses inferens jenis. Dalam tugasan mudah (seperti coretan kod pertama), inferens jenis bergantung pada konteks untuk menentukan jenis pembolehubah yang ditetapkan. Walau bagaimanapun, dalam coretan kod kedua, kehadiran struct mencipta ungkapan dengan berbilang komponen, menjadikan inferens jenis samar-samar.

Adakah ini pepijat dalam Go? Ternyata, ia adalah isu yang diketahui yang telah dibincangkan dalam Isu 6842:

Isu 6842: spec: Menetapkan kepada medan dengan notasi pengisytiharan pendek

Isu masih tidak dapat diselesaikan, menunjukkan bahawa tingkah laku ini adalah bertujuan. Untuk mengatasi pengehadan ini, anda boleh sama ada menaip secara eksplisit menganotasi pembolehubah sebelumnya atau menggunakan bentuk tugasan yang lebih panjang, seperti f.Bar = next.

Atas ialah kandungan terperinci Mengapa Inferens Jenis Go Gagal dengan Tugasan Medan Struktur?. 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