我希望对一个值建模,该值可以有两种可能的形式:不存在或字符串。
自然的方式来做到这一点是Maybe String
,或者Optional<String>
,或者string option
,等。然而,Go没有变异类型是这样的。
然后,我认为在Java,C等之后,替代方案将是可空性或nil
在Go中。但是,nil
不是string
Go类型的成员。
搜索后,我想到使用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方法有效地构建字符串。它最大程度地减少了内存复制。零值可以使用了。 与几乎相