一个想当然的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{""}
更多文章
本站热门
- socks5 协议详解
- zerotier简明教程
- 搞定面试中的系统设计题
- frp 源码阅读与分析(一):流程和概念
- 用peewee代替SQLAlchemy
- Golang(Go语言)中实现典型的fork调用
- DNSCrypt简明教程
- 一个Gunicorn worker数量引发的血案
- Golang validator使用教程
- Docker组件介绍(二):shim, docker-init和docker-proxy
- Docker组件介绍(一):runc和containerd
- 使用Go语言实现一个异步任务框架
- 协程(coroutine)简介 - 什么是协程?
- SQLAlchemy简明教程
- Go Module 简明教程