我希望对一个可以有两种可能形式的值进行建模:缺席或字符串.

实现这一点的自然方法是使用Maybe StringOptional<String>string option等.但是,围棋没有这样的变体类型.

然后,我想,继Java、C等之后,另一种 Select 将是nullability,或者nil in Go.然而,nil不是Go中string类型的成员.

找了一下,我想用*string型.这可能行得通,但似乎非常尴尬(例如,我不能像获取 struct 文本的地址那样获取字符串文本的地址).

在围棋中对这样的价值建模的惯用方式是什么?

推荐答案

你可以用sql.NullString左右,但我个人会坚持*string.至于尴尬,不幸的是你不能只有sp := &"foo".但这方面有一个workaround分:

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

strPtr("foo")的呼叫应该是内联的,所以它实际上是&"foo".

另一种可能是使用new:

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

Go相关问答推荐

将类型定义为泛型类型实例化

Go中的net.SplitHostPort(r.RemoteAddr)安全性

Go:拆分一个由逗号分隔的键/值对字符串,并在给定的键/价值对中嵌入可能的逗号

该文件位于模块.内,该模块不包含在您的工作区中

Golang prometheus:有没有办法衡量出站请求的指标?

尽管存在 WaitGroup,Goroutines 似乎被打断了

当客户端同时是服务器时,需要什么 mTLS 证书?

GoLang:net.LookupHost 返回重复的 ips

在两个单独的速率受限端点之间同步请求

如何从 Go 中的 `HijackedResponse` 中删除 Cursor Position ANSI 转义码?

Golang模板无法访问embedFS中的文件

try 运行 docker-compose up -d 时出现错误

同时调用应该只获取一次数据

使用无服务器工作流 go sdk 时出现间歇性 JSON 解组错误

自定义指标未显示在 prometheus web ui 中,grafana 中也是如此

如何在 Windows 上使用 cgo 为 386 arch 构建 lib?

Scanner.Buffer - 最大值对自定义拆分没有影响?

Go:如何通过 GIN-Router 从 AWS S3 将文件作为二进制流发送到浏览器?

Go 泛型是否与 LINQ to Objects 等效?

Beego - 我需要context.Context而不是 Beego 上下文