Hi Kurtis,
good to know that a map will always be "kind of" passed by reference to 
functions. I have verified that with a short test-program on the playground 
-> https://go.dev/play/p/HxdgpM-QozM
So in the next code-review all those *[maptype] references will be removed. 
Things are very different in this case in other programming languages…

I understand the misconception and that a map[type]interface{} won't 
automagically convert the data-type from the parameter into anything else. 
My intention was to explain the compiler to just accept whatever is fed 
into the function and just pass the data through to a function that uses 
interface{} for a single parameter. That's all this function needs to do: 
Accept a map of "something", get single values of "something" and pass them 
on to another function that accepts a single parameter of "something".

I think i have found a solution in using a "generic" interface, stumbled 
upon this web-site: https://www.geeksforgeeks.org/generics-in-golang/?ref=rp

And created a little test-program: https://go.dev/play/p/mOu1pmmfdX8

This should allow me to pass different types of maps - actually i only need 
three types - to a generic function that passes the values on to another 
(generic) function.

Thank you very much for your help.

Best regards from Charleston (WV),
     Frank/2

Kurtis Rader schrieb am Dienstag, 14. März 2023 um 22:57:13 UTC-4:

> On Tue, Mar 14, 2023 at 7:07 PM Frank Jüdes <jue...@gmail.com> wrote:
>
>> Thank you very much Ian!
>> I am using a pointer to the map because i want to pass the map by 
>> reference, not by value. 
>> Those maps can become pretty large and are being handed down through a 
>> couple of function calls and i don't want them to be copied over and over 
>> again.
>>
>
> Maps are a special-case. You can't pass them "by value" in the sense you 
> mean because a "map" value is a very tiny structure that contains a pointer 
> to the actual map. Possibly the oldest public discussion of the fact maps 
> are reference type is this blog post: https://go.dev/blog/maps. Using a 
> pointer does, in fact, avoid copying that very small data structure but is 
> not necessary to keep from copying the entire map.
>  
>
>> I read the document you referenced, but am not able to understand…
>> So i can use interface{} or any just to generalize simple types? 
>> Why is the compiler accepting then a p_Values map[string]interface{} as a 
>> parameter of a function? - What would be a compatible data-type to pass as 
>> this parameter?
>>
>
> The compiler accepts a type of "map[string]interface{}" because that is 
> well defined and obviously useful, Functions, such as those in the fmt 
> package, would not be useful if a function could not deal with the 
> "interface{}" type directly or indirectly. Your confusion is very common 
> and arises from the misconception that the Go map implementation will 
> magically convert map values from a concrete type (e.g., "int") to the 
> "any" type if that is what is needed in a particular context. One reason it 
> doesn't do so is the same reason it doesn't auto-magically convert any 
> other map value type; e.g., "int" to "float".
>
> -- 
> Kurtis Rader
> Caretaker of the exceptional canines Junior and Hank
>

-- 
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/35a85e3c-be23-4e61-8b59-fcdd2f93a4ecn%40googlegroups.com.

Reply via email to