У меня возникла проблема, когда я начал использовать Golang после Python. В Python переменная, объявленная внутри оператора if, будет видна для функции/метода, если оператор находится внутри функции.
из базовой модели импорта pydantic класс какой-то тип (BaseModel): """ Модель описывает новую структуру данных, которая будет использоваться. """ sometype1: ул Защиту someaction(somedata:sometype): """ сделай какое-нибудь действие :param somedata: экземпляр некоторого типа :возвращаться: """ print("%s" % somedata.sometype1 ) def somefunc(somedata:int, somebool:bool, Anydata:sometype): """ Это функция :param somedata: какое-то случайное целое число :param somebool: то, что должно быть True (иначе будет ошибка) :param Anydata: экземпляр некоторого типа :возвращаться: """ если somebool==True: somenewdata=любые данные какое-то действие (некоторые новые данные) если __name__=="__main__": печать("некоторые") thedata :sometype = sometype(sometype1="stringtypedata") somefunc(1, Правда, данные) Среда IDE может только предупредить вас («Перед присвоением может быть указана локальная переменная '...'») о том, что в некоторых случаях на нее нельзя ссылаться (точнее, не будет переменной с именем «somenewdata», если «somebool» — ложь).

Когда я попытался сделать что-то подобное в Go, я не смог использовать переменную вне оператора if.
//основной пакет для демонстрации пакет основной импортировать "ФМТ" //какой-то тип организует поток данных введите sometype struct { строка sometype1 } // какое-то действие выполняет действие func someaction (somedata sometype) { fmt.Printf("%v", некоторые данные) } //somefunc — это функция func somefunc(somedata int, somebool bool, Anydata sometype) { если somebool == true { некоторые новые данные = любые данные } какое-то действие (некоторые новые данные) } функция main() { fmt.Println("некоторые") thedata := sometype{"stringtype"} somefunc(1, правда, данные) } Эта ошибка («Неразрешенная ссылка «...»») появится в IDE, и код не будет скомпилирован. Мой вопрос был - почему это происходит? Проголосуйте, если у вас была такая же проблема.

Мобильная версия