patterngoCritical
Is this casting in golang?
Viewed 0 times
golangcastingthis
Problem
paxPayment, ok = dataObject.(*entities.PassengerPayment)What are the brackets used for? I'm not sure what is going on in this assignment operation.
Do you need any more details to answer this question?
Solution
It's a Type assertion. A type assertion can be used to:
Quoting from the spec:
For an expression
asserts that
More precisely, if
More specifically your example is a special form of it which also reports whether the type assertion holds. If not,
This special form never panics unlike the form of:
Which if
- obtain a value of concrete type from a value of interface type
- or to obtain a value of a different interface type than the initial one (an interface with a different method set, practically not subset of the original one as that could simply be obtained using a simple type conversion).
Quoting from the spec:
For an expression
x of interface type and a type T, the primary expressionx.(T)asserts that
x is not nil and that the value stored in x is of type T. The notation x.(T) is called a type assertion.More precisely, if
T is not an interface type, x.(T) asserts that the dynamic type of x is identical to the type T. In this case, T must implement the (interface) type of x; otherwise the type assertion is invalid since it is not possible for x to store a value of type T. If T is an interface type, x.(T) asserts that the dynamic type of x implements the interface T.More specifically your example is a special form of it which also reports whether the type assertion holds. If not,
ok will be false, and if the assertion holds, ok will be true.This special form never panics unlike the form of:
paxPayment = dataObject.(*entities.PassengerPayment)Which if
dataObject does not hold a value of type *entities.PassengerPayment will panic.Code Snippets
paxPayment = dataObject.(*entities.PassengerPayment)Context
Stack Overflow Q#31379404, score: 192
Revisions (0)
No revisions yet.