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

新手上路,请多包涵

我有一个在某些情况下返回字符串的函数,即当程序在 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 许可协议

阅读 2.4k
2 个回答

如果不能使用 "" ,返回一个类型为 *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 值。否则,认为它没有用。

另见相关问题:

我如何在 Go 中表示可选字符串?

获取和返回指向 string 的指针的替代方法: 如何在 Go 中执行文字 *int64?

原文由 icza 发布,翻译遵循 CC BY-SA 4.0 许可协议

Go 内置了对多个返回值的支持

此功能经常用于惯用的 Go, 例如 从函数返回结果和错误值。

在你的情况下它可能是这样的:

 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

原文由 Nic 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题