当前位置: 首页 > 面试题库 >

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

惠洛华
2023-03-14
问题内容

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

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

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

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

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


问题答案:

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

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

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

另一种可能性是使用new

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


 类似资料:
  • 问题内容: 对于我的应用程序,字符串是否为人类可读的都没有关系。 问题答案: 将结构编码为字符串的一种流行方法是使用JSON。 您有某些限制,例如无法获取所有信息(例如,每个字段的特定类型),仅序列化导出的字段以及不处理递归值。但这是序列化数据的简单标准方法。 工作示例: 给出以下输出: https://play.golang.org/p/sx-xdSxAOG

  • 问题内容: 我有一个在某些情况下会返回字符串的函数,即当程序在Linux或MacOS上运行时,否则返回值应为nil,以便在代码中进一步省略一些特定于OS的检查。 但是,当我尝试编译此代码时,出现错误: test.go:10:3​​:不能在返回参数中使用nil作为类型字符串。 如果我只返回一个空字符串(如),则无法将此返回值与代码中的进一步内容进行比较。 那么问题是如何返回正确的nil字符串值? 谢

  • 问题内容: 我正在尝试快速连接多个字符串3: 编译时出现以下错误: 以前它可以迅速运行2。我不确定为什么它不再起作用了。 问题答案: OP提交的错误报告: SR-1122:无法对强制展开的值进行二进制运算符链的类型检查 该问题已解决(修复将于2017年1月3日提交给母版),因此在即将到来的Swift 3.1中不再是问题。 这似乎是与以下情况相关的错误(在Swift 2.2中仅存在于3.0中): 在

  • 问题内容: 我正试图解组该文件: 进入这个结构: 使用以下说明: 问题是在“ json-schema@0.2.3”中,我们有一个许可证数组而不是一个字符串,由于这个原因,我显然得到了 有没有一种方法可以自动处理可以是数组或字符串的字段? 谢谢 问题答案: 不幸的是,软件包没有提供真正的自动解决方案。 但是您可以将依赖项解组为a 而不是。只是一个,因此您可以根据第一个字节确定消息的类型。 例: 另一

  • 问题内容: Go是否与Python的多行字符串相似? 如果不是,编写跨多行字符串的首选方式是什么? 问题答案: 根据语言规范,您可以使用原始字符串文字,该字符串由反引号而不是双引号分隔。

  • 问题内容: 在Go中,a 是原始类型,这意味着它是只读的,对其的每次操作都会创建一个新的字符串。 因此,如果我想多次连接字符串而又不知道结果字符串的长度,那么最好的方法是什么? 天真的方法是: 但这似乎不是很有效。 问题答案: 新方法: 在Go 1.10+中strings.Builder,这里是。 生成器用于使用Write方法有效地构建字符串。它最大程度地减少了内存复制。零值可以使用了。 与几乎相