|
|
|
|
|
by kkowalczyk
4428 days ago
|
|
You're blaming a language for a bug in your code. interface{} is nothing like void* because it's type-safe. interface{} is (type, value) i.e. it remembers the type of the value it contains.
void * is just a value. Your code snippet has a bug because you didn't check the type assertion result. Here's a fixed version: http://play.golang.org/p/vlsXtEmgMs In C a cast is unsafe because it doesn't tell you if you did something wrong. In Go, type assertion is safe. It tells you if it succeeded and if you ignore it, it'll panic, informing you that you have tried to perform an illegal operation. For more see: http://golang.org/ref/spec#Type_assertions |
|
But you are right, I'm new enough to Go to forget about the 'ok' check on the type conversion. Checking errors on any unsafe operations is really the best way to go. If you are unsure of the type of a structure you are getting, you really should be checking it.
[0] http://golang.org/doc/effective_go.html#interface_conversion...