Go: Type Assertions — есть ли ошибка в спецификации?

Есть ли ошибка в утверждениях Go Spec Type?

Утверждение типа, используемое в операторе присваивания или инициализации специальной формы.

v, ok = x.(T)
v, ok := x.(T)
var v, ok = x.(T)
var v, ok interface{} = x.(T) // dynamic types of v and ok are T and bool

дает дополнительное нетипизированное логическое значение.

Что последний пример должен быть и означать? var v, ok interface{} = x.(T) ?

Я получаю сообщение об ошибке в Go 1.19 syntax error: unexpected interface, expecting := or = or comma

"Есть ли ошибка в спецификации?" Если у вас возникает такой вопрос: Спросите себя, насколько вероятно, что вы первым заметили эту ошибку. Тогда внимательно ищите опечатки в коде.

Volker 21.11.2022 07:24
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
4
1
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Все эти строки пытаются выполнить одну и ту же операцию: утверждение типа x для ввода T. Значение ok определяет, было ли утверждение успешным. В последнем приведенном вами примере единственное отличие состоит в том, что вместо того, чтобы Go определял тип для v и ok, вы указали тип interface{} для обоих. Объявление v и ok как interface{} не меняет содержащихся в них значений. Это позволит вам отправлять их в функции или добавлять в коллекции, которые ожидают тип interface{}, после чего их нужно будет снова утверждать.

Ах, это объявление var (как interface{}), а также присваивание. Спасибо. Однако он не компилируется - syntax error: unexpected interface, expecting := or = or comma

Zaphod 21.11.2022 04:14

В Go нет «приведения» или «приведения типов», это утверждения типов, которые отличаются от того, как большинство языков определяют приведение типов.

JimB 21.11.2022 04:19

@Zaphod, он компилируется, у тебя где-то опечатка. go.dev/play/p/sjrx1tmOEXl

JimB 21.11.2022 04:22

@JimB Извините, мой язык был неточным. Именно это я имел в виду. Я изменил ответ, чтобы использовать правильные слова.

Woody1193 21.11.2022 07:17

Другие вопросы по теме