go get github.com/kevinpfab/ptr
In Go, to get a pointer to a basic literal you need to first set the literal to a variable.
var namePtr *string
name := "Octocat"
namePtr = &name
The ptr
package let's you do this inline, which is particularly useful when working with pointer heavy structs.
type Employee struct {
FirstName *string
LastName *string
HourlyRate *float32
}
github := &Employee{
FirstName: ptr.String("Octo"),
LastName: ptr.String("Cat"),
HourlyRate: ptr.Float32(15.00),
}
All basic types and time.Time
are supported. Other commonly pointered types in the standard library would be welcome additions.
An extra helper S(v interface{}) string
is defined to safely get the string representation of the underlying value of a pointer.
var namePtr *string
fmt.Println(ptr.S(namePtr)) // Writing fmt.Println(*namePtr) would crash the program.
// Output: <nil>
name := "Octocat"
namePtr = &name
fmt.Println(ptr.S(namePtr))
// Output: Octocat
Package ptr
is MIT licensed.