package main
import (
"fmt"
"log"
)
func main() {
a := []string{"abc", "edf"}
log.Println(fmt.Sprint(a))
}
上面的Go程序将打印以下输出,切片值位于方括号"[]"
内。
2009/11/10 23:00:00 [abc edf]
我想知道在源代码中将[]
添加到格式化字符串中的位置。
我检查了源代码src/fmt/print.go
文件,但找不到执行此操作的确切代码行。
有人可以提供提示吗?
答案 0 :(得分:8)
您正在打印切片的值。它格式化/打印在print.go
,未导出的函数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
打印在未导出的函数fmtBytes()
中:
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 }