go - strings.Split 行为怪异

标签 go

我正在做一个简单的 strings.Split on a date。

格式为2015-10-04

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

输出是[2015 10 03]

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

panic: runtime error: index out of range

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

最佳答案

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

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 | - |
+-------+--------+----------+

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

主要包

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.

关于go - strings.Split 行为怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35879039/

相关文章:

arrays - 如何将 JOIN 映射到具有子结构数组的结构数组

go - 未定义 : proto. ProtoPackageIsVersion3

go - 在 Golang 中查找模式的字节偏移量

pointers - 如何访问指向结构的指针的值?

multithreading - 在 Go 中使用 map 时忽略 goroutine/thread-safety 的危险是什么?

parsing - 如何将多个数据对象传递给 Golang 中的 HTML 模板

arrays - Golang 模板 : how to define array in a variable?

去反射(reflect) : how to dynamically create a pointer to a pointer to . ..?

dictionary - 落在引用/指针上的类型断言

go - 使用 Gocql 获取超时错误