2016-06-28 16 views
5
package main 

import (
    "fmt" 
    "log" 
) 

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

उपरोक्त गो प्रोग्राम स्क्वायर ब्रैकेट "[]" के अंदर स्लाइस मान के साथ निम्न आउटपुट प्रिंट करेगा।स्क्वायर ब्रैकेट कहां से आते हैं?

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

और मुझे पता है, जहां स्रोत कोड में है कि [] स्वरूपित स्ट्रिंग में जोड़ा जाता है चाहता हूँ।

मैंने स्रोत कोड src/fmt/print.go फ़ाइल की जांच की है, लेकिन यह कोड की सटीक रेखा नहीं मिल सका।

कोई भी संकेत प्रदान कर सकता है?

उत्तर

8

आप एक टुकड़ा के मूल्य को प्रिंट कर रहे हैं। यह/print.go में मुद्रित स्वरूपित है, unexported समारोह printReflectValue(), वर्तमान में लाइन # 980:

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   } 

और लाइन # 995:

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

ध्यान दें कि यह "सामान्य" स्लाइस के लिए है (अपने []string की तरह) , बाइट स्लाइस अलग ढंग से नियंत्रित किया जाता है:

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 समारोह ०१२३८८७९५५२१ में छापा जाता है:

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

त्वरित संकेत देने के लिए बहुत बहुत धन्यवाद! – Bob

संबंधित मुद्दे