On Sun, Aug 20, 2017 at 4:08 PM, Tong Sun <suntong...@gmail.com> wrote:
> The > > fmt.Println(unmarshal(`{"foo": 3}`)) > > prints a pointer instead of 3. > Yes, it is a pointer to an integer holding the value 3. If you want it to format differently, implement fmt.Stringer. > > This is NOT what I'm asking for, despite what you think. > I am aware. The difference is - again - one of syntax, which I described as "a very marginal benefit, at best". > I think any further explanation is pointless, since you disagree from the > very first. It'll be fruitless trying to make you look from other's view. > > All I'm trying to do is to make a point. So far it is *inconvenient*, to > deal with the situation I've described. Think of dealing with a json string > of several meg, which full of nullable ints. It is doable, but your "*int" > is not the solution. > How, specifically, is "int?" better? Again, describe the semantics of what you are actually *suggesting*. From what I can tell, the two are mechanically and bijectively translatable into each other. Looking at this example: https://stackoverflow.com/questions/2690866/what-is-the-purpose-of-a-question-mark-after-a-type-for-example-int-myvariabl You'd write that in go as var num *int // Is the HasValue property true? if num != nil { fmt.Println("num = " + *num) } else { fmt.Println("num = Nil"); } // y is set to zero var y int if num != nil { y = *num } // num.Value throws an InvalidOperationException if num.HasValue is false defer func() { if v := recover(); v != nil { fmt.Println("panic:", v) } }() y = *num Yes, there obviously is a difference. But it is a very minor one. > This is the end of the discussion. > What discussion? You seem to refuse to answer even the simplest questions about your proposal, like "what's the difference to using pointers?". > And I'm only asking for consideration in my OP. > > > > On Sun, Aug 20, 2017 at 9:45 AM, Axel Wagner < > axel.wagner...@googlemail.com> wrote: > >> On Sun, Aug 20, 2017 at 3:21 PM, Tong Sun <suntong...@gmail.com> wrote: >> >>> On Sun, Aug 20, 2017 at 2:22 AM, Axel Wagner < >>> axel.wagner...@googlemail.com> wrote: >>> >>> ii := new(int) >>>> (*ii) = 3 >>>> (*ii)++ >>>> >>>> Yes, it's not exactly the same syntax. It still demonstrates that what >>>> you are suggesting creates, at best, very marginal benefit. >>>> >>> >>> This is where I don't agree on. >>> >>> var ii *int >>>> >>> >>> This is what you are suggesting, how to define the variable. I.e., *to >>> replace "int?"*. >>> >> >> Again, what you write as "int?", you write as "*int" instead. What you >> describe as "int?" is a type, that can either contain an int, or nothing. >> That is exactly what pointers do; they are either nil, or contain a >> reference to an int. >> >> >>> >>> ii = 3 >>>> >>> >>> This is what I believe what will happen if I parse json '{"ii", 3}' into >>> it, >>> >> >> The semantics of particular packages is what they choose. In the case of >> encoding/json, it does what you want: https://play.golang.org/ >> p/3XIimrd6RF >> >> or read 3 from DB into it. >>> >> >> I don't know how database/sql behaves in this matter. I suspect to a >> degree that depends on the driver. In any case, this is a library-problem, >> not a language problem. >> >> >>> If not, then you didn't do a good job explaining your point. >>> >> >> You made a suggestion for a language change. I believe it is fair to put >> the onus of explanation on you here. Both of what the expected benefits of >> your proposal are and why the current semantics aren't enough. >> >> ii++ >>> >>> >>> This demonstrate how I can deal with a "int?" variable in C#. >>> >> >> And I demonstrated how you can deal with a "*int" variable in Go in >> exactly the same manner. I demonstrated that your suggestion seems to be >> exactly that: That you want to write "ii++" instead of writing "(*ii)++". I >> summarized that as "a very marginal benefit at best". >> >> >>> So, all in all, you are either shooting without fully understand what I >>> am asking, or don't understand what "int?" actually means in C#, or both. >>> >> >> Then explain better what you are asking for. I indeed don't know C#. But >> I understand the ?-operator to be the equivalent of Maybe<T> in Haskell or >> Option<T> in rust, the semantics of both I described above. Pointers are >> providing the corresponding semantics for Go. >> >> >>> >>> >>>> On Sun, Aug 20, 2017 at 8:00 AM, Tong Sun <suntong...@gmail.com> wrote: >>>> >>>>> <sigh> I did. why there are always people assuming the other party >>>>> they are talking to is just silly. <sigh> >>>>> >>>>> Anyway, this is what i got: >>>>> >>>>> var ii *int >>>>> ii = 3 >>>>> ii++ >>>>> >>>>> cannot use 3 (type int) as type *int in assignment >>>>> >>>>> invalid operation: ii++ (non-numeric type *int) >>>>> >>>>> >>>>> >>>>> On Sun, Aug 20, 2017 at 1:24 AM, Tyler Compton <xavi...@gmail.com> >>>>> wrote: >>>>> >>>>>> I don't think it's immediately obvious what use cases this "int?" >>>>>> proposal delivers that aren't covered by "*int". The encoding/json >>>>>> package >>>>>> uses pointers to support null JSON values. >>>>>> >>>>>> As a more general point, when someone answers your question, they're >>>>>> taking time out of their day to help you. I think it's reasonable for the >>>>>> burden of proof to be put upon the asker, who is looking to others for >>>>>> help. >>>>>> >>>>>> On Sat, Aug 19, 2017 at 9:28 PM Tong Sun <suntong...@gmail.com> >>>>>> wrote: >>>>>> >>>>>>> Oh yeah? Are you sure what you are answering is what I'm asking? >>>>>>> >>>>>>> Please try to understand what people are asking before showing off >>>>>>> yourself, or post concrete example to proof that you understand >>>>>>> correctly >>>>>>> what people are asking. >>>>>>> >>>>>>> On Sat, Aug 19, 2017 at 4:02 PM, Axel Wagner < >>>>>>> axel.wagner...@googlemail.com> wrote: >>>>>>> >>>>>>>> Go can do what you want today, just that it's spelled "*int". >>>>>>>> >>>>>>>> On Sat, Aug 19, 2017 at 6:01 PM, Tong Sun <suntong...@gmail.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> - "int?" will be a different type than "int". I.e., we know very >>>>>>>>> well what we are sacrificing when we choose that type. >>>>>>>>> - There is a demand there, json and/or sql. Denying it won't make >>>>>>>>> it go away. >>>>>>>>> >>>>>>>>> (*Sorry to Jan, was sending to the wrong place*) >>>>>>>>> >>>>>>>>> On Sat, Aug 19, 2017 at 11:54 AM, Jan Mercl <0xj...@gmail.com> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> On Sat, Aug 19, 2017 at 5:05 PM Tong Sun <suntong...@gmail.com> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>> > Suggesting C# type syntax like "int?" so as to take nil as >>>>>>>>>> valid value. >>>>>>>>>> >>>>>>>>>> - As int is not a pointer type, what would nil int mean? >>>>>>>>>> >>>>>>>>>> - Are you willing to sacrifice extra storage for the additional >>>>>>>>>> isNil information or do you prefer that int cannot represent >>>>>>>>>> 2^(sizeof(int)*8) different values? >>>>>>>>>> >>>>>>>>>> - (xyproblem?) If you need the information like 'isValid', why a >>>>>>>>>> separate bool [field] is not enough? >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> >>>>>>>>>> -j >>>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> 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. >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> -- >>>>>>> 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. >>>>>>> >>>>>> >>>>> >>>> >>> >> > -- 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.