一尘不染

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

go

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

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

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

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

如果我只返回一个空字符串(如)return "",则无法将此返回值与nil代码中的进一步内容进行比较。

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

谢谢。


阅读 1187

收藏
2020-07-02

共1个答案

一尘不染

如果无法使用"",返回一个类型的指针*string; 或者,因为这是围棋,你可以声明多个返回值,如:(response string, ok bool)

当您没有要返回的“有用”字符串时,使用*string:return 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值。否则,认为它没有用。

2020-07-02