Это кастинг в голанге?

paxPayment, ok = dataObject.(*entities.PassengerPayment)

Для чего используются скобки? Я не уверен, что происходит в этой операции назначения.

Вам нужны какие-либо подробности, чтобы ответить на этот вопрос?

Ответ 1

Это утверждение типа. Утверждение типа может использоваться для:

  • получить значение конкретного типа из значения типа интерфейса
  • или для получения значения типа интерфейса, отличного от исходного (интерфейс с другим набором методов, практически не подмножество исходного, поскольку это можно было просто получить с помощью простого преобразования типов).

Цитирую из спецификации:

Для выражения x типа интерфейса и типа T основное выражение

x.(T)

утверждает, что x не равен nil и что значение, хранящееся в x имеет тип T Обозначение x.(T) называется утверждением типа.

Точнее, если T не является типом интерфейса, x.(T) утверждает, что динамический тип x идентичен типу T В этом случае T должен реализовать тип (interface) x; в противном случае утверждение типа недопустимо, поскольку x может сохранить значение типа T Если T является типом интерфейса, x.(T) утверждает, что динамический тип x реализует интерфейс T

Точнее, ваш пример - это особая форма, которая также сообщает, имеет ли место утверждение типа. Если нет, то ok будет false, а если утверждение выполнено, ok будет true.

Эта специальная форма никогда не паникует в отличие от формы:

paxPayment = dataObject.(*entities.PassengerPayment)

Который, если dataObject не содержит значение типа *entities.PassengerPayment dataObject будет паниковать.