Как вернуть ноль строку в го? - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть функция, которая возвращает строку при определенных обстоятельствах, а именно, когда программа работает в Linux или MacOS, в противном случае возвращаемое значение должно быть равно нулю, чтобы в дальнейшем не проверять некоторые специфичные для ОС проверки в коде.

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

однако, когда я пытаюсь скомпилировать этот код, я получаю сообщение об ошибке:

test.go: 10: 3: нельзя использовать nil в качестве строки типа в возвращаемом аргументе.

Если я верну просто пустую строку, такую ​​как return "", я не смогу сравнить это возвращаемое значение с nil далее в коде.

Итак, вопрос в том, как вернуть правильное значение строки nil?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 10 сентября 2018

Go имеет встроенную поддержку нескольких возвращаемых значений :

Эта функция часто используется в idiomatic 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
0 голосов
/ 10 сентября 2018

Go допускает несколько типов возврата. Так что используйте это в ваших интересах и верните ошибку или любой другой тип. Проверьте это для получения дополнительной информации: http://golangtutorials.blogspot.com/2011/06/return-values-from-go-functions.html?m=1

0 голосов
/ 10 сентября 2018

Если вы не можете использовать "", верните указатель типа *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: Как мне сделать литерал * int64 в Go?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...