encoding/json/v2: optimize IsZero method resolution for omitzero (fix #80868) - #80887
Closed
SparshGarg999 wants to merge 1 commit into
Closed
encoding/json/v2: optimize IsZero method resolution for omitzero (fix #80868)#80887SparshGarg999 wants to merge 1 commit into
SparshGarg999 wants to merge 1 commit into
Conversation
Contributor
|
This PR (HEAD: 27cb769) has been imported to Gerrit for code review. Please visit Gerrit at https://go-review.googlesource.com/c/go/+/814683. Important tips:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #80868
Context & Problem
When marshalling structs tagged with
omitzerousingencoding/json/v2, if a field's underlying type implementsIsZero() boolon a pointer receiver (e.g.,func (t *MyType) IsZero() bool),encoding/json/v2previously evaluated valueIsZeromethod resolution before checking pointer receiver methods. This caused reflection to construct an addressable copy on the heap, triggering two extra allocations per field during struct marshalling.Solution & Changes
IsZeromethod resolution insrc/encoding/json/v2/fields.goto test for pointer-receiverIsZeroimplementations first before value-receiver fallback.omitzerofields implementingIsZero.Testing & Verification
json.Marshalallocations onomitzerostructs with pointer-receiverIsZeromethods, verifying zero extra allocations.