Since Dimension can hold any instance type it needs to encode each type for 
each element of the slice. I would file an enhancement to use RLE when encoding 
interface slices. It won’t be backwards compatible though. 

> On Apr 4, 2021, at 10:22 AM, 'Axel Wagner' via golang-nuts 
> <golang-nuts@googlegroups.com> wrote:
> 
> 
> Oh, I should also not, to be fair: You *can* decode the gob into an 
> `[]Dimension`, but you *can't* do the same with json. So, the comparison with 
> json is unfair insofar, as the encoded json is actually incomplete - it 
> doesn't hold the type-information of *which* `Dimension` implementation to 
> use.
> 
>> On Sun, Apr 4, 2021 at 5:18 PM Axel Wagner <axel.wagner...@googlemail.com> 
>> wrote:
>> I believe it is expected behavior (well… given that the gob format is pretty 
>> much defined as "whatever the gob package does", it surely is, at this 
>> point).
>> gob is able to decode types completely, without having a "framework" to work 
>> on - you need to pass a pointer to `json.Unmarshal`, so that the decoder 
>> knows what you expect, but that isn't necessary with gob. It does that by 
>> encoding interfaces using their type-name, followed by their value and then 
>> looking up the type-name when decoding (which is why you have to 
>> `gob.Register`). Note that a `[]Dimension` *can* be heterogenous, that is, 
>> it doesn't have to contain only one type of value. If you look at a hexdump 
>> of your data, you'll see that's what's happening - every point gets a 
>> `main.Point` in the output.
>> 
>> You are correct, that gob is not super efficient in this case. There 
>> probably would be a denser packing (where, instead of a type-name, you use 
>> an index into an implicit table, for example). But at this point, it's just 
>> how gob works. I said it before and I say it again: I don't believe gob is a 
>> very good encoding format. It is convenient to use, in Go, but IMO it also 
>> comes with significant drawbacks. You might want to look into, say, protobuf.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/golang-nuts/CAEkBMfF1cA9_QRB8BTKiO8zqfV%2Bjz-ZRQ67ZJrujOArBH5W9yw%40mail.gmail.com.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/D09DE425-97D6-463D-90E1-BD3A119F7194%40ix.netcom.com.

Reply via email to