我有一个在某些情况下返回字符串的函数,即当程序在 Linux 或 MacOS 中运行时,否则返回值应该为 nil,以便在代码中进一步省略一些特定于操作系统的检查。
func test() (response string) {
if runtime.GOOS != "linux" {
return nil
} else {
/* blablabla*/
}
}
但是,当我尝试编译这段代码时,出现错误:
test.go:10:3: 不能在返回参数中使用 nil 作为类型字符串。
如果我只返回一个空字符串,如 return ""
,我无法在代码中进一步将此返回值与 nil
进行比较。
那么问题是如何返回一个正确的 nil 字符串值呢?
原文由 sotona 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果不能使用
""
,返回一个类型为*string
的指针;或者——因为这是 Go——你可以声明多个返回值,例如:(response string, ok bool)
。使用
*string
:返回nil
指针,当你没有要返回的“有用”字符串时。当你这样做时,将它分配给一个局部变量,并返回它的地址。使用多个返回值:当你有一个有用的字符串要返回时,用
ok = true
返回它,例如:否则:
这就是它的样子:
在调用方,首先检查
ok
返回值。如果是true
,您可以使用string
值。否则,认为它没有用。另见相关问题:
我如何在 Go 中表示可选字符串?
获取和返回指向
string
的指针的替代方法: 如何在 Go 中执行文字 *int64?