2013-09-05 23 views
9

Ben golang bir newbee değilim ve io paketini test etmek için bir program yazmak:Golang derleyici neden değişkenin bildirildiğini düşünür, ancak kullanılmaz?

func main() { 
    readers := []io.Reader{ 
     strings.NewReader("from string reader"), 
     bytes.NewBufferString("from bytes reader"), 
    } 

    reader := io.MultiReader(readers...) 
    data := make([]byte, 1024) 

    var err error 
    //var n int 

    for err != io.EOF { 
     n, err := reader.Read(data) 
     fmt.Printf("%s\n", data[:n]) 
    } 
    os.Exit(0) 
} 

derleme hatası "ilan Err ve kullanılmaz" dır. Ama sanırım açıklama için err kullanmıştım. Derleyici neden bu hatayı veriyor?

+0

Ayrıca, hemen hemen tüm bu kodu sadece n, err: = io.Copy (os.Stdout, io.MultiReader (readers ...) '(' os.Exit (0) ') kullanarak kaldırabilirsiniz. Sonunda gereksizdir) – Dustin

cevap

18

İçindeki err, bunun için err'u gölgelendirir ve kullanılmaz (kullanılmayanın içi). Bunun nedeni, kısa değişken bildirimini (:= işleciyle) kullandığınız için, bunun için bildirilen öğeyi gölgeleyen yeni bir err değişkenini bildirmenizdir.

+1

Gölgelendirme zorlu – Gustav

+0

Birden fazla değer kullanıldığında ': =' kısa bildirim operatörünün, en az bir tane olduğu sürece önceden bildirilen değişkenler için bazılarını kullanabildiğiniz izlenimi altındaydım Bu durumda neden bu durumda "err" yi tekrar kullanmazsa, bu durumda daha önce bildirilmiş mi? – thomasrutter

+0

@thomasrutter, çünkü bu bildirimler farklı bloklardadır – aromero