不管哪一種開發語言,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