How to Return Nil String in Go?

后端 未结 3 1241
小蘑菇
小蘑菇 2021-02-06 23:51

I have a function which returns a string under certain circumstances, namely when the program runs in Linux or MacOS, otherwise the return value should be nil in order to omit s

相关标签:
3条回答
  • 2021-02-07 00:30

    Go has built-in support for multiple return values:

    This feature is used often in idiomatic Go, for example to return both result and error values from a function.

    In your case it could be like this:

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

    And then:

    response, err := test()
    if err != nil { 
        // Error handling code
        return;
    }
    
    // Normal code 
    

    If you want to ignore the error, simply use _:

    response, _ := test()
    // Normal code
    
    0 讨论(0)
  • 2021-02-07 00:43

    If you can't use "", return a pointer of type *string; or–since this is Go–you may declare multiple return values, such as: (response string, ok bool).

    Using *string: return nil pointer when you don't have a "useful" string to return. When you do, assign it to a local variable, and return its address.

    func test() (response *string) {
        if runtime.GOOS != "linux" {
            return nil
        } else {
            ret := "useful"
            return &ret
        }
    }
    

    Using multiple return values: when you have a useful string to return, return it with ok = true, e.g.:

    return "useful", true
    

    Otherwise:

    return "", false
    

    This is how it would look like:

    func test() (response string, ok bool) {
        if runtime.GOOS != "linux" {
            return "", false
        } else {
            return "useful", true
        }
    }
    

    At the caller, first check the ok return value. If that's true, you may use the string value. Otherwise, consider it useless.

    Also see related questions:

    How do I represent an Optional String in Go?

    Alternatives for obtaining and returning a pointer to string: How do I do a literal *int64 in Go?

    0 讨论(0)
  • 2021-02-07 00:56

    Go allows multiple return types. So use this to your advantage and return an error or any other type. Check this out for more info: http://golangtutorials.blogspot.com/2011/06/return-values-from-go-functions.html?m=1

    0 讨论(0)
提交回复
热议问题