2015-01-04 17 views
42

Golang’da yeniyim ve PHP’den ve Java’dan öğreniyorum.Golang deklarasyonunda "_," nedir?

Ve değişken bildiriminde bu tür anlamak gibi olamaz: Tam olarak nedir

_, prs := m["example"] 

"_" yaptığını ve neden var onlar yerine

prs := m["example"] 
bu gibi bir değişken ilan

Bu örnekte şunu buldum: https://gobyexample.com/maps

Yardım ettiğin için teşekkürler!

+3

gelecekteki dil sorular için [spec] bakabilirsiniz lütfen (http: // golang. önce org/ref/spec). Bütün sorularınızı cevaplamalıdır. – fuz

+0

Bir yorum olarak: 'prs' muhtemelen 'present' anlamına gelir. Örneğinizdeki kod, "m" haritasında "örnek" için bir girişin varlığını veya yokluğunu kontrol etmektir. – dyoo

+2

@FUZxxl Evet, daha önce orada bir göz attım, ama bu ismin adını bilmiyordum, onu bulamadım. Ayrıca, programlama dilleri için çok pedagojik olmayan ve daha ziyade örneklerle öğrenmeye yönelik resmi özellikleri de buluyorum. – Kansuler

cevap

59

İade değerleri için tüm değişkenleri bildirmek zorunda kalmaz. Bu, blank identifier olarak adlandırılır.

_, y, _ := coord(p) // coord() returns three values; only interested in y coordinate 

(other '_' use case is for import) Eğer "How to test key existence in a map?" gibi dönen değerlerden yalnızca birini kontrol etmek istediğinizde

o dönüş değeri atar olduğundan, yardımcı olduğunu göstermiştir: içinde

olarak "Effective Go, map" in:

_, present := timeZone[tz] 

harita ile de varlığını test etmek gerçek değer hakkında endişelenme, boş tanımlayıcıyı kullanabilirsiniz, basit bir alt çizgi (_).
Boş tanımlayıcı, herhangi bir türden herhangi bir değerle atanabilir veya beyan edilebilir, değeri zararsız olarak atılır.
Bir haritada varlığını sınamak için, boş tanımlayıcıyı değer için normal değişkenin yerine kullanın. Jsor gibi

in the comments ekler:

(Bir kanal okuma geçerli olduğunu ya da değil olmadığını kontrol için aynı)

"genel kabul görmüş standart" üyelik test değişkenleri aramaya "Tamam"

Bu, aşağıdakilerle birleştirmenizi sağlar:

. Sen döngüde de o bulur:

sum := 0 
for _, value := range array { 
    sum += value 
} 
: Yalnızca aralık (değer) ikinci öğe gerekiyorsa

, ilk atmak için boş bir tanımlayıcı, bir alt çizgi kullanın

+0

İyi bir örnek verdiğiniz için teşekkürler. Kavramı anlamak beni biraz düşündü, ama şimdi yapıyorum! – Kansuler

+0

IME "genel olarak kabul edilen standart", üyelik testi değişkenlerini "ok" olarak adlandırmaktır (okunan bir kanalın geçerli olup olmadığını kontrol etmek için aynıdır). – LinearZoetrope

+0

@Jsor Katılıyorum. Yorumunuzu daha fazla görünürlük için cevabınıza ekledim ve birkaç ek örnek ekledim. – VonC

3

_ boş tanımlayıcıdır. Atanması gereken değer atılır.

Burada atılan example anahtarının değeridir. İkinci kod satırı varlığını boolean'dan silip değeri prs içinde saklar.
Sadece haritadaki varlığı kontrol etmek için değeri atabilirsiniz. Bu, bir haritayı set olarak kullanmak için kullanılabilir.

+0

Açıklamanız da bana yardımcı oldu, teşekkürler! – Kansuler

25

Go derleyicisi asla kullanmadığınız değişkenleri oluşturmanıza izin vermez.

for i, value := range x { 
    total += value 
} 

Yukarıdaki kod, "i bildirilmiş ve kullanılmamış" hata iletisini döndürecektir.

biz i içinde bizim döngünün bu onu değiştirmek gerekir kullanılmadığından:

for _, value := range x { 
    total += value 
} 
+1

İlk cümlenin, boş bir tanımlayıcı olarak neden olduğunu anlamak önemlidir. – Tarik