Branching and wavefront divergence depend on the condition. If all the work items within a wavefront satisfy the condition, then there will be no divergence at all. If not, then only wavefront divergence will occur and each branch path will be executed serially.
During the if-else execution, all work-items execute the same instruction but those work-items not under the if condition are masked by the hardware. In case of else block, same thing happens but the mask is reversed. So, if there is no else block, then only one branch path is executed.
Regarding the "goto": Try to avoid the goto statements as they are not efficient for SIMDs and can cause irreducible control flow. As per the OpenCL spec 1.2:
Whether or not irreducible control flow is illegal is implementation defined.
So, the OpenCL compiler can generate error against the "goto" statements.