sol tarafında yeni değişken yok: =


104

Burada neler oluyor?

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) ;

}

Diyen bir hata atıyor

no new variables on left side of :=

Yaptığım şey, önceden bildirilmiş bir değişkene değerleri yeniden atamaktı.


deneyinmyArray,x = [...]int{11,12,14},3
Mr Lou

Yanıtlar:


138

colon :Mevcut değişkene yeni bir değer atarken ikinci ifadeden onu kaldırın .

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

colon :İlk ifadenizde yaptığınız gibi kısa bildirimi ve atamayı ilk kez gerçekleştirdiğinizde kullanılır myArray :=[...]int{12,14,26}.


26

Go :=ve =. Konumunda iki tür atama operatörü vardır . Semantik olarak eşdeğerdirler (atamaya göre), ancak ilki aynı zamanda bir "kısa değişken bildirimi" dir ( http://golang.org/ref/spec#Short_variable_declarations ), bu da solda en az bir doğru olması için yeni değişken bildirimi.

İkinciyi basit bir atama ifadesiyle değiştirebilirsiniz :=-> =veya algoritmanız için uygunsa yeni bir değişken kullanabilirsiniz.


Ve :=kullanılamaz _mı? örneğin_ := someFunc()
stt106

7

Bir yan not olarak, yeniden beyan yalnızca çok değişkenli bir kısa bildirimde görünebilir

Dil spesifikasyonundan alıntı yapmak:

Normal değişken bildirimlerinin aksine, kısa bir değişken bildirimi, aynı blokta daha önce aynı tipte bildirilmiş olmaları ve boş olmayan değişkenlerden en az birinin yeni olması koşuluyla değişkenleri yeniden bildirebilir. Sonuç olarak, yeniden beyan yalnızca çok değişkenli bir kısa bildirimde görünebilir. Yeniden beyan, yeni bir değişken getirmez; sadece orijinale yeni bir değer atar.

package main

import "fmt"


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

    fmt.Println(a, b, c)
}

Golang'daki değişkenlerin yeniden beyan edilmesiyle ilgili çok güzel bir örnek: https://stackoverflow.com/a/27919847/4418897


Not için teşekkürler. Çok değişkenli kısa bir bildirimle kafamı karıştırdım, bu nedenini açıklıyor.
Li Jinyao

7
myArray  :=[...]int{12,14,26}

Önceki yorumcular tarafından belirtildiği gibi :=, bir tür kısa vadeli ve / veya değişken bildiriminin kısa biçimidir .

Yani yukarıdaki ifadede iki şey yapıyorsunuz.

  1. Sen edilir ilan olmaya Değişkeninizi myArray .
  2. Sen edilir atama için tamsayı dizisi myArray değişken.

Kodunuzun ikinci kısmı başarısız, çünkü burada yaptığınız şey:

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

YENİDEN ilan mı mevcut zaten değerler tamsayı içeren değişken myArray.

Bu çalışıyor:

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

Bu Çünkü, atama mevcut (önceden beyan / başlatılmış) değişkenine tamsayı dizisi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.