go generate generics