首页 > 解决方案 > 在 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"

知道如何在不超出范围的情况下做到这一点吗?我已经研究过用三点语法解包......但结构似乎不支持它。

标签: go

解决方案


在访问元素之前检查切片的长度:

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

推荐阅读