Golang Switch переменная область действия - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь выяснить простой переключатель в Golang, и я застрял с переменной областью действия.

var body string
var errs error
req := gorequest.New()
var resp gorequest.Response
switch verb {
case 0:
    resp, body, errs := req.Get(suburl).
        Set("X-Auth-Token", d.Token).
        Set("Content-type", "application/json").
        End()
}
if errs != nil {
    return &ConnResponse{resp.StatusCode, body, fmt.Errorf("%s", errs)}
}

Я объявил resp, body, errs и req до переключения, и я подумалчто они будут доступны после корпуса переключателя.То, что возвращает компилятор, находится ниже ошибок (из объявления случая)

# command-line-arguments
./conn.go:135:3: resp declared and not used
./conn.go:135:9: body declared and not used
./conn.go:135:15: errs declared and not used

Так что мне любопытно, отличается ли область видимости переменной внутри тела переключателя от объявленной в функции?Как будет выглядеть этот фрагмент кода, чтобы получить доступ к данным после тела переключателя.

1 Ответ

0 голосов
/ 14 мая 2018

Ваша проблема в этой строке:

resp, body, errs := req.Get(suburl)

Оператор объявления коротких переменных := создает новые переменные и присваивает им значения. Эти новые переменные, как говорят, "затеняют" переменные, которые вы создали во внешней области видимости, потому что они имеют одинаковые имена и, таким образом, они "скрывают" переменные внешней области действия внутри этой области. Чтобы решить эту проблему, просто присвойте значения существующим переменным из внешней области вместо создания новых:

resp, body, errs = req.Get(suburl)

Обратите внимание на использование здесь присваивания = вместо краткого объявления :=.

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