Greeting Gophers!

After using Go for a couple of medium sized products, I have come to 
realize that a lot of libraries use pointers to emulate optional/maybe 
types.This includes the protobuf auto generated code for Go. Since there is 
no direct way to take the address of a literal, people end up writing 
something like:

value1 := "A nice string!"
value2 := 64 
library.Function(&value1, &value2)


Some libraries provide helper functions that look like:

func String(str string) *string {
 return &str
}

func Int64(num int64) *int64 {
 return &num
}


While both methods do the job, neither of them is elegant. In the first 
case, the developer is forced to declare throwaway variables, whereas in 
the second case, multiple libraries implement the same functionality. I 
personally ended up implementing a pointers library for use across my 
projects.

Is is possible to provide a standard shortcut for taking the address of a 
literal? Something like:

library.Function(&"A nice string!", &64)

or

library.Function(&string("A nice string!"), &int64(64))

will do the trick. Even a standard library implementation of the helper 
functions would be nice - though not as elegant.

I am aware that some discussions on this topic have taken place in the 
past, but all the threads I have found were 3+ years old. Now that the Go 
ecosystem has matured and we know what kind of libraries are being 
implemented, perhaps it is time to revisit this?

An alternative would be to provide a way to determine whether a variable 
has been initialized for non pointer types, but I guess that is too big a 
change to Go 1.x - even if it is accepted in the first place.

--
Thanks,
Satyen Rai

-- 
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