Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to use switch case with nullable string (*string) in Golang?

Here is my code:

func ToSomething(arg *string) string {
    switch arg {
    case nil:
        return "something1"
    case "args1":
        return "something2"
    case "args2":
        return "something3"
    default:
        return "something4"
    }
}

It shows a red line under args1 and args2 that says

Invalid case ‘"args1"’ in switch on ‘arg’ (mismatched types ‘string’
and ‘*string’)

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

anyone knows to use switch case with nullable string (*string) properly in golang?

Here is a go playground: https://go.dev/play/p/0TaeXSEIt06

>Solution :

Since arg is of type *string, you’d have to list values of *string in the case branches.

But! You obviously want to match the pointed string values, so listing *string values is not what you want: that checks for pointer equality.

So instead you should not use arg as the switch expression, but provide sensible conditions on the case branches like this:

func ToSomething(arg *string) string {
    switch {
    case arg == nil:
        return "something1"
    case *arg == "args1":
        return "something2"
    case *arg == "args2":
        return "something3"
    default:
        return "something4"
    }
}

Testing it:

ptr := func(s string) *string { return &s }

fmt.Println(ToSomething(nil))
fmt.Println(ToSomething(ptr("args1")))
fmt.Println(ToSomething(ptr("args2")))
fmt.Println(ToSomething(ptr("xx")))

Output (try it on the Go Playground):

something1
something2
something3
something4
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading