"Goland bug", not Golang.

On Monday, September 8, 2025 at 6:10:43 PM UTC+2 TheDiveO wrote:

> There is no shadowing, this is a Golang reporting bug.
>
> On Monday, September 8, 2025 at 5:09:42 AM UTC+2 Mike Schinkel wrote:
>
>> Hi Gophers,
>>
>> I have some code that is not working as I expect it to and wanted to see 
>> if I was misunderstanding something or if there is in fact a bug in the 
>> compiler. I have tried this in v1.24.5 and 1.25.1.
>>
>> Here is a version of the code — heavily cut down to provide a minimal 
>> example — that is not acting as I expect it to:
>>
>> func ensureRootConfig(cs cfgutil.ConfigStore) (root *RootConfigV1, err 
>> error) {
>>   if cs != nil {
>>    root = &RootConfigV1{}
>>    err = cs.LoadJSON(&root)
>>   } else {
>>    root = NewRootConfigV1(RootConfigV1Args{})
>>    err = cs.SaveJSON(root)
>>   }
>>   return root, err
>> }
>>
>> When I run the above code the assignment to `root` gets shadowed and the 
>> return variable is null. I have confirmed this using Goland and the Delve 
>> debugger.
>>
>> The following does not shadow `root`:
>>
>> func ensureRootConfig(cs cfgutil.ConfigStore) (*RootConfigV1, error) {
>>   var root *RootConfigV1
>>   var err error
>>   if cs != nil {
>>    root = &RootConfigV1{}
>>    err = cs.LoadJSON(&root)
>>   } else {
>>    root = NewRootConfigV1(RootConfigV1Args{})
>>    err = cs.SaveJSON(root)
>>   }
>>   return root, err
>> }
>>
>>
>> This code, of course also works, too, but with multiple returns is not 
>> the style of code we want use:
>>
>> func ensureRootConfig(cs cfgutil.ConfigStore) (*RootConfigV1, error) {
>>   if cs != nil {
>>    root := &RootConfigV1{}
>>    err := cs.LoadJSON(&root)
>>    return root, err
>>   }
>>   root := NewRootConfigV1(RootConfigV1Args{})
>>   err := cs.SaveJSON(root)
>>   return root, err
>> }
>>
>>
>> I do understand that some might want to say “just use the other 
>> approaches” but if this is a bug it still needs to be reported and ideally 
>> fixed given how the language should allow this, right?  That is unless I 
>> misunderstand something about how named return variables work with 
>> shadowing.
>>
>> -Mike
>>
>>
>>

-- 
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].
To view this discussion visit 
https://groups.google.com/d/msgid/golang-nuts/237b7e40-6134-4d30-86b1-4cfb9be0f108n%40googlegroups.com.

Reply via email to