Size: a a a

2020 March 20

М

Мерль🛠 in Go-go!
Jane Doe
Вечер в хату. Люди добрые, подскажите как мне чекнуть переменную на существование?
Пробовал так:
if cl == nil { ... }

Компилятор мне говорит:
undefined cl


Я определяют перед этим переменную:
var cl string
if cl == "" { ... }

После этого компилятор говорит: cl declared but not used
>  подскажите как мне чекнуть переменную на существование?

если программа собралась — переменная есть
если не собралась с ошибкой "undefined ПЕРЕМЕННАЯ", то переменной нет
источник

JD

Jane Doe in Go-go!
Мерль🛠
>  подскажите как мне чекнуть переменную на существование?

если программа собралась — переменная есть
если не собралась с ошибкой "undefined ПЕРЕМЕННАЯ", то переменной нет
😏
источник

JD

Jane Doe in Go-go!
Я опять с переменными. Ошибка компиляции:
./server.go:31:7: undefined: fo
./server.go:40:3: undefined: fo

Можете объяснить почему компилятор считает что переменная undefined? Хотя вот в этой строке я четко прописываю то что переменная будет создана и ей будет присвоено значение.
источник

JD

Jane Doe in Go-go!
Jane Doe
Я опять с переменными. Ошибка компиляции:
./server.go:31:7: undefined: fo
./server.go:40:3: undefined: fo

Можете объяснить почему компилятор считает что переменная undefined? Хотя вот в этой строке я четко прописываю то что переменная будет создана и ей будет присвоено значение.
Я бы объявил эту переменную до этой строки, но не знаю какой у нее должен быть тип. Я пробовал получить тип в тестовом файле, он возращал "*os.File".
источник

ВС

Владимир Столяров in Go-go!
А вот теперь это разные области видимости
источник

AK

Anton Kramarev in Go-go!
Jane Doe
Я опять с переменными. Ошибка компиляции:
./server.go:31:7: undefined: fo
./server.go:40:3: undefined: fo

Можете объяснить почему компилятор считает что переменная undefined? Хотя вот в этой строке я четко прописываю то что переменная будет создана и ей будет присвоено значение.
Она в своем блоке кода родилась, там и умерла. А пытаетесь ее дергать извне
источник

JD

Jane Doe in Go-go!
Anton Kramarev
Она в своем блоке кода родилась, там и умерла. А пытаетесь ее дергать извне
Вся работа с переменной fo. происходит только в одной функции.
func downloadFile(conn net.Conn) {
...
}

Не совсем понимаю что имеется ввиду под "извне".
источник

ВС

Владимир Столяров in Go-go!
Примерно такое правило: внутри фигурных скобок видно все, что объявлено и внутри и вне, а вне скобок не видно того, что объявлено внутри
источник

JD

Jane Doe in Go-go!
А как это правильно пофиксить?
источник

AK

Anton Kramarev in Go-go!
Использовать внутри фигурных скобок
источник

ВС

Владимир Столяров in Go-go!
В этом случае объявить var fo <тип> перед if len...
источник

AK

Anton Kramarev in Go-go!
Или объявить пустую переменную за его пределами
источник

JD

Jane Doe in Go-go!
Владимир Столяров
В этом случае объявить var fo <тип> перед if len...
Эх.
# command-line-arguments
./server.go:29:15: cannot assign *os.File to fo (type os.File) in multiple assignment
./server.go:41:3: undefined: fo
источник

C

Calculon in Go-go!
var fo *os.File
источник

C

Calculon in Go-go!
os.Create возвращает указатель
источник

JD

Jane Doe in Go-go!
Calculon
var fo *os.File
Большое спасибо, заработало.
источник

C

Calculon in Go-go!
собственно компилятор об этом написал -
cannot assign *os.File to fo (type os.File)
источник

JD

Jane Doe in Go-go!
Calculon
собственно компилятор об этом написал -
cannot assign *os.File to fo (type os.File)
🙈пардон
источник

C

Calculon in Go-go!
Jane Doe
Эх.
# command-line-arguments
./server.go:29:15: cannot assign *os.File to fo (type os.File) in multiple assignment
./server.go:41:3: undefined: fo
а, и у тебя fo.Close выполняется вне цикла
вышел за область видимости переменной
источник

JD

Jane Doe in Go-go!
Calculon
а, и у тебя fo.Close выполняется вне цикла
вышел за область видимости переменной
Ага, я это уже поправил.
источник