Jared Meyering
Jared Meyering

Reputation: 1321

How to convert a 'string pointer' to a string in Golang?

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

Upvotes: 91

Views: 115094

Answers (3)

Spencer Connaughton
Spencer Connaughton

Reputation: 1032

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

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

Upvotes: 7

Ozan
Ozan

Reputation: 361

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

Upvotes: 27

OneOfOne
OneOfOne

Reputation: 99381

Dereference the pointer:

strPointerValue := *strPointer

Upvotes: 155

Related Questions