一个想当然的bug

许久不写Python,"".split(",") 的结果我已经不能脑内运算了:

In [1]: "".split(",")
Out[1]: ['']

我记成了 "".split(",") 的运算结果是 [],因此,昨天在debug这段代码(Golang)的时候花了我好一会儿:

$ cat main.go
package main

import (
	"fmt"
	"strings"
)

func main() {
	l := strings.Split("", ",")
	if len(l) > 0 {
		fmt.Printf("l: %+v\n", l)
	}
}

执行一下:

$ go run main.go
l: []

问题主要在于:

  • 我想当然的以为 "".split(",") 的结果会是一个空list
  • go的 fmt.Printf 真是一个大坑,空字符串你为啥不给我打出来?[""] 才是正确的打印方式呀!

解决方案

使用 %#v 替代 %+v:

$ cat main.go
package main

import (
	"fmt"
	"strings"
)

func main() {
	l := strings.Split("", ",")
	if len(l) > 0 {
		fmt.Printf("l: %#v\n", l)
	}
}
$ go run main.go
l: []string{""}


更多文章
  • 从源码看Python的descriptor
  • Python字符串格式化
  • Gunicorn 简明教程
  • Raft 论文阅读笔记
  • 什么是 Golang Comparable Types
  • GFS 论文阅读
  • MapReduce 论文阅读
  • 一起来做贼:Goroutine原理和Work stealing
  • Go语言的defer, panic和recover
  • 再读 Python Language Reference
  • 再读vim help:vim小技巧
  • 设计模式(2)- 深入浅出设计模式 阅读笔记
  • 设计模式(1)- 深入浅出设计模式 阅读笔记
  • Cython! Python和C两个世界的交叉点
  • socketserver 源码阅读与分析