proto: add TestNil test

TestNil checks for panic behavior for all top-level functions that
accept messages to ensure that we can detect when behavior changes
whether accidentally or deliberately.

This test discovered that the pure protobuf reflect behavior
differs with the fast-path implementation for a few cases.

For the protobuf reflection implementation, we explicitly check
for invalid messages in Merge and Reset. Previously, these would
not panic if the message was already empty (i.e., had no need to
actually set/clear any fields in the receiver message).

Change-Id: I571c0a819366bae993ce7c99b05fb4707e55cd3e
Reviewed-by: Damien Neil <>
3 files changed
tree: 8c5b5fa226c5693e1f409d563749ee2d53256f83
  1. .gitignore
  2. .travis.yml
  9. cmd/
  10. compiler/
  11. encoding/
  12. go.mod
  13. go.sum
  14. integration_test.go
  15. internal/
  16. proto/
  17. reflect/
  18. regenerate.bash
  19. release.bash
  20. runtime/
  21. test.bash
  22. testing/
  23. types/

Next Generation Go Protocol Buffers

WARNING: This repository is in active development. There are no guarantees about API stability. Breaking changes will occur until a stable release is made and announced.

This repository is for the development of the next major Go implementation of protocol buffers. This library makes breaking API changes relative to the existing Go protobuf library. Of particular note, this API aims to make protobuf reflection a first-class feature of the API and implements the protobuf ecosystem in terms of reflection.

Design Documents

List of relevant design documents:


We appreciate community contributions. See

Reporting Issues

Issues regarding the new API can be filed at Please use a APIv2: prefix in the title to make it clear that the issue is regarding the new API work.