Comments (2)
The disagreement here happens because of a difference of what the zero value of a timestamppb
is, vs the zero value of Golang’s time.Time
value.
Note:
func main() {
var a *timestamppb.Timestamp
var t time.Time
fmt.Println(a.AsTime())
fmt.Println(t)
}
runs and prints:
1970-01-01 00:00:00 +0000 UTC
0001-01-01 00:00:00 +0000 UTC
Note that the zero value of a timestamppb
is the Unix epoch, but the zero value time.Time
is Jan 1st, 1 AD.
Summary: This is intended behavior, even if it is unexpected.
P.S.: Huh, after reading the whole report, you seem to understand all of this already?
from protobuf.
This is an unfortunate an edge-case in bridging the Go type system and the protobuf type system and there are no good answers other than being as consistent as possible across the module about how this is handled.
Of note, protoreflect.Message.IsValid says:
// IsValid reports whether the message is valid.
//
// An invalid message is an empty, read-only value.
//
// An invalid message often corresponds to a nil pointer of the concrete
// message type, but the details are implementation dependent.
// Validity is not part of the protobuf data model, and may not
// be preserved in marshaling or other operations.
That is, a nil pointer is semantically treated as an "empty, read-only value".
In the protobuf data model, reading the "seconds" and "nanos" fields of an empty Timestamp
message would report 0, which results in a date of 1970-01-01.
from protobuf.
Related Issues (20)
- Can protobuf provide tags for customized message generated fields? HOT 2
- encoding/protojson: unmarshalBytes assumes no padding if byte string length is not divisible by 4 HOT 27
- Service crash caused by encoding HOT 3
- structpb.Struct.MarshalJSON is not consistent HOT 4
- --gofast_out option in protoc discards inline comments from .proto files HOT 1
- How to redefine the json tag? HOT 2
- proto.Equal does not check for nested invalidity HOT 5
- A terrible work-around: HOT 2
- protoreflect x dynamicpb interaction: should descriptors match names or be pointer-identical?
- add proto.IsWellFormed helper function to validate that a message value is well-formed HOT 1
- google.protobuf.Empty as response serializes to not empty response depending on request headers HOT 2
- protocmp: Panic on embed message field comparison HOT 7
- Panic when use enum.String() before main() HOT 2
- Proposal: remove presumably unused purego support
- Why does deserialize []byte("xxxx") into a proto structure work? HOT 2
- proto: Export ErrInvalidUTF8 HOT 1
- type-safe Extensions API using Go Generics HOT 1
- Query on the using protobuf module HOT 3
- Slice of generated message structs is both empty and not empty at the same time HOT 3
- Incompatible API change between v1.33.0 and v1.34.0 HOT 7
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from protobuf.