strings.Split表演怪异

时间:2016-03-08 22:11:08

标签: go

我正在做一个简单的字符串。日期分裂。

格式为2015-10-04

month := strings.Split(date, "-")

输出为[2015 10 03]

如果我month[0]它会返回2015年,但是当我执行月份[1]时,它会返回

panic: runtime error: index out of range

虽然它显然不是。我用错了吗?知道发生了什么事吗?

1 个答案:

答案 0 :(得分:7)

这是一个完整的工作示例:

package main

import "strings"

func main() {
    date := "2015-01-02"
    month := strings.Split(date, "-")
    println(month[0])
    println(month[1])
    println(month[2])
}

输出:

2015
01
02

Playground

也许你没有使用正确的“破折号”字符? There are lots

+-------+--------+----------+
| glyph |       codes       |
+-------+--------+----------+
| -     | U+002D | -    |
| ֊     | U+058A | ֊  |
| ־     | U+05BE | ־  |
| ᠆     | U+1806 | ᠆  |
| ‐     | U+2010 | ‐  |
| ‑     | U+2011 | ‑  |
| ‒     | U+2012 | ‒  |
| –     | U+2013 | –  |
| —     | U+2014 | —  |
| ―     | U+2015 | ―  |
| ⁻     | U+207B | ⁻  |
| ₋     | U+208B | ₋  |
| −     | U+2212 | −  |
| ﹘     | U+FE58 | ﹘ |
| ﹣     | U+FE63 | ﹣ |
| -     | U+FF0D | - |
+-------+--------+----------+

这是具有不同输入字符串的代码,它也会抛出索引超出范围的异常:

package main

import "strings"

func main() {
    date := "2015‐01‐02" // U+2010 dashes
    month := strings.Split(date, "-")
    println(month[0])
    println(month[1])
    println(month[2])
}

Playground.