This release of the github.com/golang/protobuf module introduces a number of significant changes relative to the previous minor release. In particular, this module is now implemented in terms of the new google.golang.org/protobuf module, which is the next major revision of Go bindings for protocol buffers. From this point onwards, most of the development effort for Go protobufs will be dedicated to the new module, with minimal changes being made to this module.
This release maintains backwards compatibility with previous releases of this module. Any observable changes in behavior are to fix bugs, change unspecified behavior, or to make behavior more compliant with the protobuf specification. The compatibility document provides us the freedom to make changes in these areas.
Notable changes
Wire serialization
Wire serialization is now implemented in terms of the new proto package by calling out to the relevant functionality in that package (e.g., proto.Marshal and proto.Unmarshal). There should be no observable changes in behavior other what is mentioned elsewhere in the release notes (e.g., behavior around errors or nil values).
JSON and text serialization
The JSON and text format implementations have been ported to use protobuf reflection under the hood instead of relying on Go reflection. This provides flexibility as they can operate on any concrete message type that properly implements the new proto.Message interface.
The implementations do not use the new protojson or prototext packages in order to maintain a higher degree of backwards compatibility. Our analysis unfortunately showed us that too many tests rely on their output being stable by performing byte-for-byte comparisons. Even though the compatibility promise gives us the freedom to change the output, we have chosen not to do so for pragmatic reasons. The implementations are now functionally frozen (bugs and all) and will not receive future improvements. Users are encouraged to migrate to the protojson or prototext packages instead.
Well-known types
The well-known types declared under ptypes are moved to the google.golang.org/protobuf module. The packages continue to exist, but all declarations forward to ones in the new module.
For a period of time, it is expected that the protoc-gen-go plugin continues to generate code with dependencies on the well-known types in this module. The import paths for the well-known types are determined by the go_package option specified in the .proto files. Since these files are managed by the main protocol buffers project, it will require a new release of the protobuf toolchain before the new import paths take effect. Depending on this module’s packages for well-known types is fine since they simply forward over to the new packages.
While descriptor and plugin are not packages for well-known types, they too have also been moved to the new module.
Types registry
In order for dynamic usages of protobufs to operate correctly, there must be a unified registry between this module and the new google.golang.org/protobuf module. The protoregistry package is the primary registry for all protobuf files that are linked into a Go program. The registration functions (e.g., proto.RegisterType) in this package forward to the global registries in that module, and the lookup functions (e.g., proto.MessageType) in this package source from the global registries in that module.
Nil values
... (truncated)
Commits
1b794fe all: upgrade to google.golang.org/protobuf@v1.21.0 (#1081)
e9dc0d7 all: update to wrap google.golang.org/protobuf
3a3cefd all: use google.golang.org/protobuf/testing/protopack for tests (#1063)
c8ad453 all: use google.golang.org/encoding/protowire (#1062)
7592abe internal/cmd/generate-alias: fix for lacking go_package options (#1061)
b860323 proto: inline the implementation of protoimpl.X.ExtensionDescFromType (#1056)
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
- `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language
- `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language
- `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language
- `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language
- `@dependabot badge me` will comment on this PR with code to add a "Dependabot enabled" badge to your readme
Additionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com):
- Update frequency (including time of day and day of week)
- Pull request limits (per update run and/or open at any time)
- Automerge options (never/patch/minor, and dev/runtime dependencies)
- Out-of-range updates (receive only lockfile updates, if desired)
- Security updates (receive only security updates, if desired)
Bumps github.com/golang/protobuf from 1.3.3 to 1.4.0.
Release notes
Sourced from github.com/golang/protobuf's releases.
Commits
1b794fe
all: upgrade to google.golang.org/protobuf@v1.21.0 (#1081)e9dc0d7
all: update to wrap google.golang.org/protobuf3a3cefd
all: use google.golang.org/protobuf/testing/protopack for tests (#1063)c8ad453
all: use google.golang.org/encoding/protowire (#1062)7592abe
internal/cmd/generate-alias: fix for lacking go_package options (#1061)b860323
proto: inline the implementation of protoimpl.X.ExtensionDescFromType (#1056)8466869
go.mod: set go version to go1.9 (#1055)7bd8073
proto: use fixed UnmarshalState API3f90b72
all: use google.golang.org/protobuf v1.20.0a3619c1
all: use new protogen options APIDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) - `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language - `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language - `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language - `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language - `@dependabot badge me` will comment on this PR with code to add a "Dependabot enabled" badge to your readme Additionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com): - Update frequency (including time of day and day of week) - Pull request limits (per update run and/or open at any time) - Automerge options (never/patch/minor, and dev/runtime dependencies) - Out-of-range updates (receive only lockfile updates, if desired) - Security updates (receive only security updates, if desired)