
本文介绍在 Go 语言中,将形如 "[156, 100, 713]" 的字符串解析为 []int 的标准、健壮实现方法,涵盖去括号、分割、类型转换及错误处理关键步骤。
本文介绍在 go 语言中,将形如 `"[156, 100, 713]"` 的字符串解析为 `[]int` 的标准、健壮实现方法,涵盖去括号、分割、类型转换及错误处理关键步骤。
在 Go 中,字符串 " [156, 100, 713] " 并非合法 JSON,也不直接对应 Go 内置的序列化格式,因此不能直接使用 json.Unmarshal(除非先规范化为 JSON 数组,如 "[156,100,713]")。最常用且可控的方式是手动解析:去除首尾方括号 → 按分隔符切分 → 逐个转换为整数。
以下是推荐的完整实现(含错误处理):
package main
import (
"fmt"
"strconv"
"strings"
)
func stringToIntSlice(s string) ([]int, error) {
// 1. 去除首尾空格及方括号(支持带空格的 "[ 156 , 100 , 713 ]")
trimmed := strings.TrimSpace(s)
if len(trimmed) < 2 || trimmed[0] != '[' || trimmed[len(trimmed)-1] != ']' {
return nil, fmt.Errorf("invalid slice string format: missing brackets")
}
content := strings.TrimSpace(trimmed[1 : len(trimmed)-1])
// 2. 处理空切片情况
if content == "" {
return []int{}, nil
}
// 3. 按逗号分割,并对每个元素 trim 空格
parts := strings.Split(content, ",")
result := make([]int, 0, len(parts))
for _, part := range parts {
numStr := strings.TrimSpace(part)
if numStr == "" {
continue // 跳过空项(如 "[1, , 2]" 中的中间空项)
}
num, err := strconv.Atoi(numStr)
if err != nil {
return nil, fmt.Errorf("failed to parse '%s' as int: %w", numStr, err)
}
result = append(result, num)
}
return result, nil
}
func main() {
input := "[156, 100, 713]"
ints, err := stringToIntSlice(input)
if err != nil {
panic(err)
}
fmt.Printf("%#v\n", ints) // []int{156, 100, 713}
}✅ 关键要点说明:
- 使用 strings.TrimSpace 提升鲁棒性,兼容前后空格及内部不规范空格;
- 显式校验 [] 结构,避免静默失败;
- 对每个分割后的子串再次 TrimSpace,防止 "100 " 类空格干扰 Atoi;
- 务必检查 strconv.Atoi 错误——生产代码中忽略错误可能导致 panic 或数据丢失;
- 支持空切片 [] 和含空元素的边界情况(可按需调整策略);
⚠️ 注意事项:
- 若输入来自不可信来源(如用户输入或 API),强烈建议使用此带错误处理的版本,而非原文中忽略错误的 _ 赋值;
- 如原始字符串符合严格 JSON 格式(如 "[156,100,713]"),也可用 json.Unmarshal,但需额外引入 encoding/json 且对格式敏感;
- 避免正则解析——对简单结构而言过度复杂,且性能与可维护性均不如 strings 原生操作。
掌握这一模式,可轻松扩展支持浮点数(strconv.ParseFloat)、自定义分隔符或嵌套结构等进阶场景。

















