I apologise if I seem negative, I'm still new here.
Also, it sometimes seems like it is easier to try to come up with an ingenious answers than decide a question is not appropriate.
That 'test/if true/if false' seems like a block that I would want to remove if I were using Blockly to edit Go.
Go is not an 'expression language', and has moved further away from that than C/C++. I'd be happy to have that block in SmallTalk, Scheme, even C, etc. where it has a plausible meaning (in reasonable, properly reviewed code).
However, IMHO, in Go that construct can lead to 'atypical' Go code. I'd characterise Go's philosophy as "do the 80% very well, then allow the other 20%, but it won't be automagic".
Either 'thing' would have to be declared (with its type) already outside the scope of the 'if true/if false' or their would be two different type 'thing' inside the 'if true/if false'.
As you wrote, in the second case, 'thing' would have to be an interface.
However, it is generally better to avoid using an empty interface in Go, the most uses of an interface are not the empty interface, all the useful types have some common behaviour.
So I'd suggest waiting to see the Variable Type proposal mature (
https://groups.google.com/forum/#!topic/blockly/jiRR_gi0-T8).
IMHO, the 'test/if true/if false' block is still a poor fit for Go, and hence not a good use case to test the Variable Type proposal.
I'll go further and say that I'd prefer control constructs that map easily onto Go.
For example, Go can return multiple values from a function.
However the shape of the existing 'functions' and 'variables' that I see at
https://developers.google.com/blockly/ don't allow that.
Further, because Go treats errors as ordinary values, functions *often* return two or more values.
Multiple return values are assigned to multiple variables (often of different types) when the function returns.
It would be practically impossible to use much of the I/O library without handling multiple return values. Put another way, you couldn't write a robust program that could give any indication of what it did, like a relative of 'the halting problem'.
Just my $0.02
GB-)