88

Is it possible to get the string value from a pointer to a string?

I am using the goopt package to handle flag parsing and the package returns *string only. I want to use these values to call a function in a map.

Example

var strPointer = new(string)
*strPointer = "string"

functions := map[string]func() {
    "string": func(){
        fmt.Println("works")
    },
}  

//Do something to get the string value

functions[strPointerValue]()

returns

./prog.go:17:14: cannot use strPointer (type *string) 
as type string in map index
030
  • 10,842
  • 12
  • 78
  • 123
Jared Meyering
  • 1,291
  • 2
  • 11
  • 21

3 Answers3

148

Dereference the pointer:

strPointerValue := *strPointer
OneOfOne
  • 95,033
  • 20
  • 184
  • 185
25

A simple function that first checks if the string pointer is nil would prevent runtime errors:

func DerefString(s *string) string {
    if s != nil {
        return *s
    }

    return ""
}

Ozan
  • 331
  • 4
  • 4
3

Generic https://stackoverflow.com/a/62790458/1079543 :

func SafeDeref[T any](p *T) T {
    if p == nil {
        var v T
        return v
    }
    return *p
}