internal/impl: implement oneof fields

Dynamically generate functions for handling individual fields within an oneof.
This implementation uses Go reflection to interact with the currently generated
approach, which uses an interface that can only be set by a limited set of
wrapper structs.

Change-Id: Ic848df922d6547411a15c4a20bfbbcae362da5c0
Reviewed-on: https://go-review.googlesource.com/c/142895
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/internal/impl/message.go b/internal/impl/message.go
index 13babe0..5a5027f 100644
--- a/internal/impl/message.go
+++ b/internal/impl/message.go
@@ -118,7 +118,7 @@
 			continue fieldLoop
 		}
 	}
-	if fn, ok := t.MethodByName("XXX_OneofFuncs"); ok {
+	if fn, ok := reflect.PtrTo(t).MethodByName("XXX_OneofFuncs"); ok {
 		vs := fn.Func.Call([]reflect.Value{reflect.New(fn.Type.In(0)).Elem()})[3]
 	oneofLoop:
 		for _, v := range vs.Interface().([]interface{}) {