我有一个在某些情况下返回字符串的函数,即当程序在Linux或MacOS上运行时,否则返回值为零,以便在代码中进一步省略某些特定于操作系统的检查。
func test() (response string) {
if runtime.GOOS != "linux" {
return nil
} else {
/* blablabla*/
}
}
但是,当我尝试编译此代码时,出现错误:
test.go:10:3:不能在返回参数中使用nil作为类型字符串。
如果我仅返回诸如return ""
之类的空字符串,则无法在代码中进一步将此返回值与nil
进行比较。
所以问题是如何返回正确的nil字符串值?
谢谢。
答案 0 :(得分:13)
如果不能使用""
,则返回类型为*string
的指针;或-因为这是Go-您可以声明多个返回值,例如:(response string, ok bool)
。
使用*string
:当您没有要返回的“有用”字符串时,返回nil
指针。完成后,将其分配给局部变量,然后返回其地址。
func test() (response *string) {
if runtime.GOOS != "linux" {
return nil
} else {
ret := "useful"
return &ret
}
}
使用多个返回值:当您有有用的字符串要返回时,请使用ok = true
将其返回,例如:
return "useful", true
否则:
return "", false
它是这样的:
func test() (response string, ok bool) {
if runtime.GOOS != "linux" {
return "", false
} else {
return "useful", true
}
}
在呼叫者处,首先检查ok
返回值。如果是true
,则可以使用string
值。否则,认为它没有用。
另请参阅相关问题:
How do I represent an Optional String in Go?
获取和返回指向string
的指针的替代方法:How do I do a literal *int64 in Go?
答案 1 :(得分:2)
Go has built-in support for multiple return values:
惯用的Go for example中经常使用此功能,以从函数返回结果和错误值。
在您的情况下,可能是这样的:
func test() (response string, err error) {
if runtime.GOOS != "linux" {
return "", nil
} else {
/* blablabla*/
}
}
然后:
response, err := test()
if err != nil {
// Error handling code
return;
}
// Normal code
如果您想忽略该错误,只需使用_
:
response, _ := test()
// Normal code
答案 2 :(得分:0)
Go允许多种返回类型。因此,请利用此优势,并返回错误或任何其他类型。查阅更多信息:http://golangtutorials.blogspot.com/2011/06/return-values-from-go-functions.html?m=1