登录
首页 >  Golang >  Go问答

在 Go 中如何处理结构体的空值初始化问题?

来源:stackoverflow

时间:2024-02-23 16:54:24 312浏览 收藏

哈喽!今天心血来潮给大家带来了《在 Go 中如何处理结构体的空值初始化问题?》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

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

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"

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


正确答案


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

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 expect
data := Address{Street: s[0], City: s[1], ZipCode: s[2]}

它的作用是将空字符串附加到切片中,以确保它始终具有正确数量的元素。演示示例:https://play.golang.org/p/Igj6yT5fffl

以上就是《在 Go 中如何处理结构体的空值初始化问题?》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>