tidak ada variabel baru di sisi kiri: =

104

Apa yang sedang terjadi disini?

package main

import "fmt"

func main() {

    myArray  :=[...]int{12,14,26}  ;     
    fmt.Println(myArray)

    myArray  :=[...]int{11,12,14} //error pointing on this line 

    fmt.Println(myArray) ;

}

Ini melempar kesalahan yang mengatakan

no new variables on left side of :=

Apa yang saya lakukan adalah menugaskan ulang nilai ke variabel yang sudah dideklarasikan.

Rune
sumber
cobamyArray,x = [...]int{11,12,14},3
Tuan Lou

Jawaban:

138

Hapus colon :dari pernyataan kedua saat Anda memberikan nilai baru ke variabel yang ada.

myArray = [...]int{11,12,14}

colon :digunakan ketika Anda melakukan deklarasi singkat dan tugas untuk pertama kalinya seperti yang Anda lakukan dalam pernyataan pertama Anda yaitu myArray :=[...]int{12,14,26}.

Yogendra Singh
sumber
26

Ada dua jenis operator penugasan di go :=dan =. Mereka secara semantik setara (sehubungan dengan penugasan) tetapi yang pertama juga merupakan "deklarasi variabel pendek" ( http://golang.org/ref/spec#Short_variable_declarations ) yang berarti bahwa di sebelah kiri kita perlu memiliki setidaknya a deklarasi variabel baru agar benar.

Anda dapat mengubah yang kedua menjadi pernyataan tugas sederhana :=-> =atau Anda dapat menggunakan variabel baru jika tidak masalah dengan algoritme Anda.

Mihai Toader
sumber
Dan :=tidak bisa digunakan dengan _? misalnya_ := someFunc()
stt106
7

Sebagai catatan tambahan, deklarasi ulang hanya dapat muncul dalam deklarasi singkat multi-variabel

Mengutip dari spesifikasi Bahasa:

Tidak seperti deklarasi variabel biasa, deklarasi variabel pendek dapat mendeklarasikan ulang variabel asalkan dideklarasikan sebelumnya di blok yang sama dengan tipe yang sama, dan setidaknya salah satu variabel tidak kosong baru. Akibatnya, deklarasi ulang hanya dapat muncul dalam deklarasi pendek multi-variabel. Deklarasi ulang tidak memperkenalkan variabel baru; itu hanya memberikan nilai baru ke aslinya.

package main

import "fmt"


func main() {
    a, b := 1, 2
    c, b := 3, 4

    fmt.Println(a, b, c)
}

Berikut adalah contoh yang sangat bagus tentang deklarasi ulang variabel di golang: https://stackoverflow.com/a/27919847/4418897

Santosh Pillai
sumber
Terima kasih atas catatannya. Saya bingung dengan deklarasi pendek multi-variabel, ini menjelaskan alasannya.
Li Jinyao
7
myArray  :=[...]int{12,14,26}

Seperti yang dinyatakan oleh komentator sebelumnya, :=adalah jenis pendek dan / atau bentuk pendek dari deklarasi variabel .

Jadi dalam pernyataan di atas Anda melakukan dua hal.

  1. Anda mendeklarasikan variabel Anda menjadi myArray .
  2. Anda menugaskan array bilangan bulat ke variabel myArray .

Bagian kedua dari kode Anda gagal, karena apa yang Anda lakukan di sini:

myArray  :=[...]int{11,12,14} //error pointing on this line 

Apakah RE-mendeklarasikan variabel yang ada myArray, yang sudah berisi nilai integer.

Ini bekerja:

myArray = [...]int{11,12,14} // NO error will be produced by this line

Karena, ini menugaskan array integer ke variabel yang ada (pra-deklarasikan / diinisialisasi).

RobEdouard
sumber