如何在Go中返回Nil字符串?

时间:2018-09-10 10:21:38

标签: string go null

我有一个在某些情况下返回字符串的函数,即当程序在Linux或MacOS上运行时,否则返回值为零,以便在代码中进一步省略某些特定于操作系统的检查。

func test() (response string) {
    if runtime.GOOS != "linux" {  
        return nil
    } else {
        /* blablabla*/
    }
}

但是,当我尝试编译此代码时,出现错误:

  
    

test.go:10:3​​:不能在返回参数中使用nil作为类型字符串。

  

如果我仅返回诸如return ""之类的空字符串,则无法在代码中进一步将此返回值与nil进行比较。

所以问题是如何返回正确的nil字符串值?

谢谢。

3 个答案:

答案 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