Невозможно преобразовать ноль в строку типа - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть этот кусок кода в функции промежуточного программного обеспечения:

params := r.URL.Query()

tok := params["x-huru-api-token"][0];

if tok == nil {
    tok := r.Header.Get("x-huru-api-token")
}

, но я получаю эту ошибку:

enter image description here

Кто-нибудь знает, о чем это?

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Значение nil не является допустимым значением для string.Если вы хотите выполнить откат к заголовку как для пропущенных, так и для пустых значений, используйте следующий код:

params := r.URL.Query()
tok := params.Get("x-huru-api-token")
if tok == "" {
    tok = r.Header.Get("x-huru-api-token")
}

Если вы хотите откатиться к заголовку только при отсутствии параметра запроса, используйте командуследующее:

params := r.URL.Query()
var tok string
if values, ok := params["x-huru-api-token"]; ok && len(values) > 0 {
   tok = values[0]  // note that tok can be the empty string ""
} else {
   tok = r.Header.Get("x-huru-api-token")
}

Обратите внимание на одно различие между кодом в этом ответе и вопросом.Этот ответ использует присваивание, чтобы установить tok внутри оператора if.Код в вопросе использует краткое объявление переменной.Краткое объявление переменной не будет скомпилировано, поскольку вновь объявленная переменная внутри оператора if не используется.

0 голосов
/ 20 декабря 2018

String не является типом указателя в Go, поэтому он не может быть nil.Нулевым значением для строки является пустая строка ("").

Правильный код должен быть:

params := r.URL.Query()

tok := params["x-huru-api-token"][0];

if tok == "" {
    tok := r.Header.Get("x-huru-api-token")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...