2 回答
TA贡献2011条经验 获得超2个赞
在访问元素之前检查切片的长度:
data := Address{}
s := strings.Split("street,city,zip", ",")
data.Street = s[0]
if len(s) > 1 {
data.City = s[1]
}
if len(s) > 2 {
data.ZipCode = s[2]
}
如果这种情况经常出现,那么写一个简单的帮助器函数:
func get(s []string, i int) string {
if i >= len(s) {
return ""
}
return s[i]
}
像这样使用它:
data := Address{Street: get(s, 0), City: get(s, 1), ZipCode: get(s, 2)}
TA贡献1821条经验 获得超4个赞
如果您宁愿使用稍微多一点的内存和更少的检查,您也可以执行以下操作:
s := strings.Split("street,city,zip", ",")
s = append(s, make([]string, 3 - len(s))...) // Change 3 to however many fields you expect
data := Address{Street: s[0], City: s[1], ZipCode: s[2]}
这样做的作用是将空字符串追加到切片,以确保它始终具有正确数量的元素。游乐场示例:https://play.golang.org/p/Igj6yT5fffl
- 2 回答
- 0 关注
- 98 浏览
添加回答
举报