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
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
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!