Bob*_*Bob 5 arrays string formatting go slice
package main
import (
"fmt"
"log"
)
func main() {
a := []string{"abc", "edf"}
log.Println(fmt.Sprint(a))
}
Run Code Online (Sandbox Code Playgroud)
上面的Go程序将打印以下输出,切片值在方括号内"[]".
2009/11/10 23:00:00 [abc edf]
我想知道在源代码中[]添加到格式化字符串中的位置.
我检查了源代码src/fmt/print.go文件,但找不到执行此操作的确切代码行.
任何人都可以提供一个提示吗?
您正在打印切片的值.它是格式化/打印的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 }
Run Code Online (Sandbox Code Playgroud)
和#995行:
994 } else {
995 p.buf.WriteByte(']')
996 }
Run Code Online (Sandbox Code Playgroud)
请注意,这是针对"常规"切片(如您的[]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
Run Code Online (Sandbox Code Playgroud)
[]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 }
Run Code Online (Sandbox Code Playgroud)