I don't think the benefits are obvious and being able to leave out 
parameters by specifying one by name is of dubious benefit. Could you not 
simply write a short set of if statements that insert a default by using a 
nulled sentinel. Like this:

func PrintMessage(s string) {
  if s == "" {
    s = "default value"
  }
  DoSomeThing(s)
}

Then call it

PrintMessage("")



On Friday, 24 August 2018 01:38:36 UTC+2, Masoud Ghorbani wrote:
>
> You're right but I think developers of Go can think about that because its 
> benefits are obvious.
>
> On Friday, August 24, 2018 at 1:23:32 AM UTC+4:30, Axel Wagner wrote:
>>
>> On Thu, Aug 23, 2018 at 9:44 AM Masoud Ghorbani <[email protected]> 
>> wrote:
>>
>>> Your opinion is like to say all of the python application should rethink 
>>> and re-write their structure because they used default values.
>>>
>>
>> One general thing to observe in all these discussions is, that Go is not 
>> Python (or Rust, Haskell, C#,…). Different languages have different goals, 
>> weigh them differently and choose different solutions to get there - and 
>> that's okay. Saying something isn't right for Go isn't the same as saying 
>> something isn't right for a different language. In the same way, saying 
>> some other language is doing something is not a convincing argument that Go 
>> should do it too.
>>  
>>
>>> I think having default values for parameters is just a feature which 
>>> will make codebase readable and smaller than before.
>>>
>>> On Thursday, August 23, 2018 at 4:38:23 AM UTC+4:30, Louki Sumirniy 
>>> wrote:
>>>>
>>>> There is a default value for everything in Go. Null. 0, "" and nil. As 
>>>> someone else said, if you want a parameter to be optional you probably 
>>>> need 
>>>> ...interface{} and then infer no parameter as 'use the default'. Going a 
>>>> little further, you can build default values into a constructor function 
>>>> for an interfaced type. 
>>>>
>>>> Oh, probably the neatest solution is to make a struct that lets you 
>>>> input the parameters either in-order or with labels instead. Then you can 
>>>> use &TypeName{} to mean 'use defaults' or whichever parameters are not 
>>>> specified get automatically set to default, either unlabeled and ordered 
>>>> such that the values that will be asserted to defaults are not the first 
>>>> ones in a struct literal used to feed parameters in. Or make the names 
>>>> nice 
>>>> and concise so they aren't troublesome to add (and if your code is going 
>>>> to 
>>>> often use defaults, probably you won't even have to specify many values 
>>>> very often anyway).
>>>>
>>>> Assertions and labeled parameters are nice features but they don't 
>>>> really save you that much time. I would suggest that it's more likely you 
>>>> need to rethink the structure of your application and make slightly 
>>>> different named parameters for those calls that will use defaults for 
>>>> specific parameters.
>>>>
>>>> Another thing is that you can make null variables imply the use of 
>>>> defaults, then you only need to put 'nil' '""' or '0' into these 
>>>> parameters 
>>>> and the code will test and fill them automatically. Or if null isn't 
>>>> handy, 
>>>> you can define sentinel values for a type that indicate 'use defaults'.
>>>>
>>>> On Wednesday, 22 August 2018 14:39:37 UTC+2, Masoud Ghorbani wrote:
>>>>>
>>>>> Why there isn't function argument default value in Golang explicitly 
>>>>> like Typescript and Python?
>>>>>
>>>> -- 
>>> 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 [email protected].
>>> 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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to