Source File
equal.go
Belonging Package
google.golang.org/protobuf/proto
package proto
import (
pref
)
func (, Message) bool {
if == nil || == nil {
return == nil && == nil
}
:= .ProtoReflect()
:= .ProtoReflect()
if .IsValid() != .IsValid() {
return false
}
return equalMessage(, )
}
func (, pref.Message) bool {
if .Descriptor() != .Descriptor() {
return false
}
:= 0
:= true
.Range(func( pref.FieldDescriptor, pref.Value) bool {
++
:= .Get()
= .Has() && equalField(, , )
return
})
if ! {
return false
}
:= 0
.Range(func( pref.FieldDescriptor, pref.Value) bool {
++
return true
})
if != {
return false
}
return equalUnknown(.GetUnknown(), .GetUnknown())
}
func ( pref.FieldDescriptor, , pref.Value) bool {
switch {
case .Message() != nil:
return equalMessage(.Message(), .Message())
case .Kind() == pref.BytesKind:
return bytes.Equal(.Bytes(), .Bytes())
case .Kind() == pref.FloatKind, .Kind() == pref.DoubleKind:
:= .Float()
:= .Float()
if math.IsNaN() || math.IsNaN() {
return math.IsNaN() && math.IsNaN()
}
return ==
default:
return .Interface() == .Interface()
}
}
func (, pref.RawFields) bool {
if len() != len() {
return false
}
if bytes.Equal([]byte(), []byte()) {
return true
}
:= make(map[pref.FieldNumber]pref.RawFields)
:= make(map[pref.FieldNumber]pref.RawFields)
for len() > 0 {
, , := protowire.ConsumeField()
[] = append([], [:]...)
= [:]
}
for len() > 0 {
, , := protowire.ConsumeField()
[] = append([], [:]...)
= [:]
}
return reflect.DeepEqual(, )
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |