2016-06-28 60 views
5
package main 

import (
    "fmt" 
    "log" 
) 

func main() { 
    a := []string{"abc", "edf"} 
    log.Println(fmt.Sprint(a)) 
} 

Yukarıdaki Go programı, "[]" köşeli parantez içindeki dilim değeriyle aşağıdaki çıktıyı basacaktır.köşeli parantez nereden geliyor?

2009/11/10 23:00:00 [abc edf]

Ve [] biçimlendirilmiş dizeye eklendiğini nereye kaynak kodunda bilmek istiyorum.

Ben kaynak kodu src/fmt/print.go dosyayı kontrol, ama bunu yapar kod kesin çizgiyi bulamadık.

herkes bir ipucu verebilir misiniz?

cevap

8

Bir dilim değerini yazdırıyorsunuz. Bu (sizin []string gibi) "genel" dilimler için olduğunu

994   } else { 
995    p.buf.WriteByte(']') 
996   } 

Not:

855 func (p *pp) printReflectValue(value reflect.Value, verb rune, depth int) 
              (wasString bool) { 

     // ... 

947  case reflect.Array, reflect.Slice: 
      // ... 

979   } else { 
980    p.buf.WriteByte('[') 
981   } 

ve hat # 995: Bu unexported fonksiyonu printReflectValue(), şu anda çizgi # 980/print.go basılmış biçimlendirilir bayt dilimleri işlenen:

948   // Byte slices are special: 
949   // - Handle []byte (== []uint8) with fmtBytes. 
950   // - Handle []T, where T is a named byte type, with fmtBytes only 

[]byte unexported fonksiyonubasılmıştır:

533 func (p *pp) fmtBytes(v []byte, verb rune, typ reflect.Type, depth int) { 

      // ... 

551   } else { 
552    p.buf.WriteByte('[') 
553   } 

      // ... 

566   } else { 
567    p.buf.WriteByte(']') 
568   } 
+0

Hızlı işaret için çok teşekkürler! – Bob