为了账号安全,请及时绑定邮箱和手机立即绑定

在 go 中初始化结构时如何处理空值?

在 go 中初始化结构时如何处理空值?

Go
猛跑小猪 2022-08-24 11:37:08
我正在尝试拆分逗号分隔的字符串,并使用值来初始化结构。这就是我现在的做法:type Address struct {    Street  string    City    string    ZipCode string}    s := strings.Split("street,city,zip", ",")data := Address{Street: s[0], City: s[1], ZipCode: s[2]}我遇到的问题是,我还必须处理此输入:"street,""street,city"任何想法如何在不超出范围的情况下做到这一点?我已经研究过使用三点语法解压缩...但结构似乎并不支持它。
查看完整描述

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)}


查看完整回答
反对 回复 2022-08-24
?
收到一只叮咚

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


查看完整回答
反对 回复 2022-08-24
  • 2 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信