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

我正在尝试拆分逗号分隔的字符串,并使用值来初始化结构。这就是我现在的做法:


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"

任何想法如何在不超出范围的情况下做到这一点?我已经研究过使用三点语法解压缩...但结构似乎并不支持它。


猛跑小猪
浏览 99回答 2
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)}

收到一只叮咚

如果您宁愿使用稍微多一点的内存和更少的检查,您也可以执行以下操作:s := strings.Split("street,city,zip", ",")s = append(s, make([]string, 3 - len(s))...) // Change 3 to however many fields you expectdata := Address{Street: s[0], City: s[1], ZipCode: s[2]}这样做的作用是将空字符串追加到切片,以确保它始终具有正确数量的元素。游乐场示例:https://play.golang.org/p/Igj6yT5fffl
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go