不管哪一种开发语言,Split函数都是常常用到。最近发现了strings包里的Split函数有个坑,真是活久见。函数
package main import "fmt" import "strings" func main() { str := "" v := strings.Split(str, "#") if len(v)%2 != 0 { fmt.Printf("v len is [%d]", len(v)) } }
指望得到结果应该是0,由于常常读数据字段的时候会作是否是几元组的判断。实际输出为:code
v len is [1]
来看Split的实现开发
func genSplit(s, sep string, sepSave, n int) []string { if n == 0 { return nil } if sep == "" { return explode(s, n) } if n < 0 { n = Count(s, sep) + 1 } c := sep[0] start := 0 a := make([]string, n) na := 0 for i := 0; i+len(sep) <= len(s) && na+1 < n; i++ { if s[i] == c && (len(sep) == 1 || s[i:i+len(sep)] == sep) { a[na] = s[start : i+sepSave] na++ start = i + len(sep) i += len(sep) - 1 } } a[na] = s[start:] return a[0 : na+1] }
能够看到最后的返回的slice最少也有一个值。细节要多注意啊,不能用固有观念来看新东西。string