Or: https://play.golang.org/p/VjFJGUI27W

On Friday, June 17, 2016 at 4:33:20 PM UTC-6, Matt Harden wrote:
>
> https://play.golang.org/p/8R6QmYw_28
>
> On Fri, Jun 17, 2016 at 3:08 PM Evan Digby <evan...@gmail.com 
> <javascript:>> wrote:
>
>> To further this, if you do need your internal model to be a concrete 
>> struct rather than interface this approach still fits:
>>
>> https://play.golang.org/p/_wrgN1FltA
>>
>>
>> On Friday, 17 June 2016 15:02:43 UTC-7, Evan Digby wrote:
>>>
>>> One approach to deal with this would be to abstract your internal model 
>>> as an interface from the model you receive and mutate them to match. This 
>>> also gives you the power to truncate/round/mutate a float however best 
>>> suites your needs rather than hoping the library truncates/rounds/mutates 
>>> in a way that meets your requirements.
>>>
>>> https://play.golang.org/p/d97ElsNa_o
>>>
>>> You could limit your internal model to just the information you need, 
>>> and in a format that better matches your requirements than the structure 
>>> dictated by the message producer.
>>>
>>> There is of course overhead to this solution, but in many many (not all) 
>>> applications this approach is worth the overhead of matching the producer's 
>>> data format to your interface. 
>>>
>>> It'll allow you to easily tack on new sources of data (if that's ever a 
>>> requirements). If they do change their format, you don't have to change all 
>>> of your downstream code. You just have to change the implementation of the 
>>> SAME interface to match the new source data. 
>>>
>>> On Friday, 17 June 2016 14:37:19 UTC-7, Jonathan Gold wrote:
>>>>
>>>> We have an upstream provider of JSON data which sends integer data 
>>>> types as floating point literals with a "0" decimal part. By default 
>>>> json.Decoder doesn't allow this and fails: 
>>>>
>>>>     https://play.golang.org/p/MEJlg1n3vs 
>>>>
>>>> Unfortunately this provider is almost certain not to change this, and 
>>>> so we just have to deal with it as clients of their API. What are some 
>>>> ways we could handle this? 
>>>>
>>>> Things that come to mind: 
>>>>
>>>>     - Submit a change to encoding/json that allows us to set some sort 
>>>>       of number processing function to customize its behavior (or to 
>>>>       set some sort of policy which allows number literals ending in 
>>>>       \.0*$ for integer targets) 
>>>>
>>>>     - Create a custom io.Reader which wraps in input stream by reading 
>>>>       individual tokens from it using an internal json.Decoder, and 
>>>>       then emits number literals without trailing ".0". 
>>>>
>>>>     - Buffer all inbound decodes into a map[string]interface{} and set 
>>>>       the decoder to UseNumber(), and then replace those json.Numbers 
>>>>       with corrected ones, then serialize back and decode once more 
>>>>       into the destination (this is similar to the token-stream 
>>>>       approach above) 
>>>>
>>>> Are there other approaches I'm overlooking? 
>>>>
>>>> jonathan 
>>>>
>>> -- 
>> 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...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to