Go

如何在Go中表示可选字符串?

发布于 2021-02-01 11:23:25

我希望对一个值建模,该值可以有两种可能的形式:不存在或字符串。

自然的方式来做到这一点是Maybe String,或者Optional<String>,或者string option,等。然而,Go没有变异类型是这样的。

然后,我认为在Java,C等之后,替代方案将是可空性或nil在Go中。但是,nil不是stringGo类型的成员。

搜索后,我想到使用type *string。这可能有效,但看起来很尴尬(例如,我无法以与获取结构文字的地址相同的方式获取字符串文字的地址)。

在Go中为这种值建模的惯用方式是什么?

关注者
0
被浏览
243
1 个回答
  • 面试哥
    面试哥 2021-02-01
    为面试而生,有面试问题,就找面试哥。

    您可以使用类似的方法sql.NullString,但我个人会坚持使用*string。至于尴尬,没错,这是事实sp := &"foo"。但是有一个解决方法:

    func strPtr(s string) *string {
        return &s
    }
    

    呼叫strPtr("foo")应内联,这样有效&"foo"

    另一种可能性是使用new

    sp := new(string)
    *sp = "foo"
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看