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
85284 次浏览

Dereference the pointer:

strPointerValue := *strPointer

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


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

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